1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "wifip2pstub_fuzzer.h"
17 #include "wifi_fuzz_common_func.h"
18
19 #include <cstddef>
20 #include <cstdint>
21 #include <unistd.h>
22 #include "wifi_device_stub.h"
23 #include "wifi_device_service_impl.h"
24 #include "wifi_p2p_stub.h"
25 #include "message_parcel.h"
26 #include "securec.h"
27 #include "define.h"
28 #include "wifi_manager_service_ipc_interface_code.h"
29 #include "wifi_p2p_service_impl.h"
30 #include "wifi_log.h"
31 #include "wifi_config_center.h"
32 #include "wifi_settings.h"
33 #include "wifi_common_def.h"
34 #include "wifi_manager.h"
35 #include "wifi_net_agent.h"
36
37 namespace OHOS {
38 namespace Wifi {
39 constexpr size_t U32_AT_SIZE_ZERO = 4;
40 constexpr int THREE = 4;
41 const std::u16string FORMMGR_INTERFACE_TOKEN = u"ohos.wifi.IWifiP2pService";
42 const std::u16string FORMMGR_INTERFACE_TOKEN_DEVICE = u"ohos.wifi.IWifiDeviceService";
43 static bool g_isInsted = false;
44 static std::mutex g_instanceLock;
45 std::shared_ptr<WifiDeviceStub> pWifiDeviceStub = std::make_shared<WifiDeviceServiceImpl>();
46 sptr<WifiP2pStub> pWifiP2pServiceImpl = WifiP2pServiceImpl::GetInstance();
Init()47 bool Init()
48 {
49 if (!g_isInsted) {
50 if (WifiConfigCenter::GetInstance().GetP2pMidState() != WifiOprMidState::RUNNING) {
51 LOGE("Init setmidstate!");
52 WifiConfigCenter::GetInstance().SetP2pMidState(WifiOprMidState::RUNNING);
53 }
54 g_isInsted = true;
55 }
56 return true;
57 }
58
OnRemoteRequest(uint32_t code,MessageParcel & data)59 bool OnRemoteRequest(uint32_t code, MessageParcel &data)
60 {
61 std::unique_lock<std::mutex> autoLock(g_instanceLock);
62 if (!g_isInsted) {
63 if (!Init()) {
64 LOGE("OnRemoteRequest Init failed!");
65 return false;
66 }
67 }
68 MessageParcel reply;
69 MessageOption option;
70 pWifiP2pServiceImpl->OnRemoteRequest(code, data, reply, option);
71 return true;
72 }
73
OnDiscoverDevicesFuzzTest(const uint8_t * data,size_t size)74 void OnDiscoverDevicesFuzzTest(const uint8_t* data, size_t size)
75 {
76 MessageParcel datas;
77 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
78 LOGE("WriteInterfaceToken failed!");
79 return;
80 }
81 datas.WriteInt32(0);
82 datas.WriteBuffer(data, size);
83 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_DISCOVER_DEVICES), datas);
84 }
85
86
OnStopDiscoverDevicesFuzzTest(const uint8_t * data,size_t size)87 void OnStopDiscoverDevicesFuzzTest(const uint8_t* data, size_t size)
88 {
89 MessageParcel datas;
90 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
91 LOGE("WriteInterfaceToken failed!");
92 return;
93 }
94 datas.WriteInt32(0);
95 datas.WriteBuffer(data, size);
96 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_STOP_DISCOVER_DEVICES), datas);
97 }
98
99
OnDiscoverServicesFuzzTest(const uint8_t * data,size_t size)100 void OnDiscoverServicesFuzzTest(const uint8_t* data, size_t size)
101 {
102 MessageParcel datas;
103 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
104 LOGE("WriteInterfaceToken failed!");
105 return;
106 }
107 datas.WriteInt32(0);
108 datas.WriteBuffer(data, size);
109 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_DISCOVER_SERVICES), datas);
110 }
111
112
OnStopDiscoverServicesFuzzTest(const uint8_t * data,size_t size)113 void OnStopDiscoverServicesFuzzTest(const uint8_t* data, size_t size)
114 {
115 MessageParcel datas;
116 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
117 LOGE("WriteInterfaceToken failed!");
118 return;
119 }
120 datas.WriteInt32(0);
121 datas.WriteBuffer(data, size);
122 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_STOP_DISCOVER_SERVICES), datas);
123 }
124
OnRequestServiceFuzzTest(const uint8_t * data,size_t size)125 void OnRequestServiceFuzzTest(const uint8_t* data, size_t size)
126 {
127 MessageParcel datas;
128 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
129 LOGE("WriteInterfaceToken failed!");
130 return;
131 }
132 datas.WriteInt32(0);
133 datas.WriteBuffer(data, size);
134 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_REQUEST_SERVICES), datas);
135 }
136
OnPutLocalP2pServiceFuzzTest(const uint8_t * data,size_t size)137 void OnPutLocalP2pServiceFuzzTest(const uint8_t* data, size_t size)
138 {
139 MessageParcel datas;
140 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
141 LOGE("WriteInterfaceToken failed!");
142 return;
143 }
144 datas.WriteInt32(0);
145 datas.WriteBuffer(data, size);
146 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_PUT_LOCAL_SERVICES), datas);
147 }
148
OnDeleteLocalP2pServiceFuzzTest(const uint8_t * data,size_t size)149 void OnDeleteLocalP2pServiceFuzzTest(const uint8_t* data, size_t size)
150 {
151 MessageParcel datas;
152 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
153 LOGE("WriteInterfaceToken failed!");
154 return;
155 }
156 datas.WriteInt32(0);
157 datas.WriteBuffer(data, size);
158 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_DELETE_LOCAL_SERVICES), datas);
159 }
160
OnStartP2pListenFuzzTest(const uint8_t * data,size_t size)161 void OnStartP2pListenFuzzTest(const uint8_t* data, size_t size)
162 {
163 MessageParcel datas;
164 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
165 LOGE("WriteInterfaceToken failed!");
166 return;
167 }
168 datas.WriteInt32(0);
169 datas.WriteBuffer(data, size);
170 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_START_LISTEN), datas);
171 }
172
OnStopP2pListenFuzzTest(const uint8_t * data,size_t size)173 void OnStopP2pListenFuzzTest(const uint8_t* data, size_t size)
174 {
175 MessageParcel datas;
176 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
177 LOGE("WriteInterfaceToken failed!");
178 return;
179 }
180 datas.WriteInt32(0);
181 datas.WriteBuffer(data, size);
182 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_STOP_LISTEN), datas);
183 }
184
OnCreateGroupFuzzTest(const uint8_t * data,size_t size)185 void OnCreateGroupFuzzTest(const uint8_t* data, size_t size)
186 {
187 MessageParcel datas;
188 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
189 LOGE("WriteInterfaceToken failed!");
190 return;
191 }
192 datas.WriteInt32(0);
193 datas.WriteBuffer(data, size);
194 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_CREATE_GROUP), datas);
195 }
196
OnRemoveGroupFuzzTest(const uint8_t * data,size_t size)197 void OnRemoveGroupFuzzTest(const uint8_t* data, size_t size)
198 {
199 MessageParcel datas;
200 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
201 LOGE("WriteInterfaceToken failed!");
202 return;
203 }
204 datas.WriteInt32(0);
205 datas.WriteBuffer(data, size);
206 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_REMOVE_GROUP), datas);
207 }
208
OnDeleteGroupFuzzTest(const uint8_t * data,size_t size)209 void OnDeleteGroupFuzzTest(const uint8_t* data, size_t size)
210 {
211 MessageParcel datas;
212 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
213 LOGE("WriteInterfaceToken failed!");
214 return;
215 }
216 datas.WriteInt32(0);
217 datas.WriteBuffer(data, size);
218 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_DELETE_GROUP), datas);
219 }
220
OnP2pConnectFuzzTest(const uint8_t * data,size_t size)221 void OnP2pConnectFuzzTest(const uint8_t* data, size_t size)
222 {
223 MessageParcel datas;
224 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
225 LOGE("WriteInterfaceToken failed!");
226 return;
227 }
228 datas.WriteInt32(0);
229 datas.WriteBuffer(data, size);
230 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_CONNECT), datas);
231 }
232
OnP2pCancelConnectFuzzTest(const uint8_t * data,size_t size)233 void OnP2pCancelConnectFuzzTest(const uint8_t* data, size_t size)
234 {
235 MessageParcel datas;
236 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
237 LOGE("WriteInterfaceToken failed!");
238 return;
239 }
240 datas.WriteInt32(0);
241 datas.WriteBuffer(data, size);
242 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_CANCEL_CONNECT), datas);
243 }
244
OnQueryP2pLinkedInfoFuzzTest(const uint8_t * data,size_t size)245 void OnQueryP2pLinkedInfoFuzzTest(const uint8_t* data, size_t size)
246 {
247 MessageParcel datas;
248 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
249 LOGE("WriteInterfaceToken failed!");
250 return;
251 }
252 datas.WriteInt32(0);
253 datas.WriteBuffer(data, size);
254 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_QUERY_INFO), datas);
255 }
256
OnGetCurrentGroupFuzzTest(const uint8_t * data,size_t size)257 void OnGetCurrentGroupFuzzTest(const uint8_t* data, size_t size)
258 {
259 MessageParcel datas;
260 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
261 LOGE("WriteInterfaceToken failed!");
262 return;
263 }
264 datas.WriteInt32(0);
265 datas.WriteBuffer(data, size);
266 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_GET_CURRENT_GROUP), datas);
267 }
268
OnGetP2pEnableStatusFuzzTest(const uint8_t * data,size_t size)269 void OnGetP2pEnableStatusFuzzTest(const uint8_t* data, size_t size)
270 {
271 MessageParcel datas;
272 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
273 LOGE("WriteInterfaceToken failed!");
274 return;
275 }
276 datas.WriteInt32(0);
277 datas.WriteBuffer(data, size);
278 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_GET_ENABLE_STATUS), datas);
279 }
280
OnGetP2pDiscoverStatusFuzzTest(const uint8_t * data,size_t size)281 void OnGetP2pDiscoverStatusFuzzTest(const uint8_t* data, size_t size)
282 {
283 MessageParcel datas;
284 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
285 LOGE("WriteInterfaceToken failed!");
286 return;
287 }
288 datas.WriteInt32(0);
289 datas.WriteBuffer(data, size);
290 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_GET_DISCOVER_STATUS), datas);
291 }
292
OnGetP2pConnectedStatusFuzzTest(const uint8_t * data,size_t size)293 void OnGetP2pConnectedStatusFuzzTest(const uint8_t* data, size_t size)
294 {
295 MessageParcel datas;
296 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
297 LOGE("WriteInterfaceToken failed!");
298 return;
299 }
300 datas.WriteInt32(0);
301 datas.WriteBuffer(data, size);
302 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_GET_CONNECTED_STATUS), datas);
303 }
304
OnQueryP2pDevicesFuzzTest(const uint8_t * data,size_t size)305 void OnQueryP2pDevicesFuzzTest(const uint8_t* data, size_t size)
306 {
307 MessageParcel datas;
308 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
309 LOGE("WriteInterfaceToken failed!");
310 return;
311 }
312 datas.WriteInt32(0);
313 datas.WriteBuffer(data, size);
314 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_QUERY_DEVICES), datas);
315 }
316
OnQueryP2pGroupsFuzzTest(const uint8_t * data,size_t size)317 void OnQueryP2pGroupsFuzzTest(const uint8_t* data, size_t size)
318 {
319 MessageParcel datas;
320 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
321 LOGE("WriteInterfaceToken failed!");
322 return;
323 }
324 datas.WriteInt32(0);
325 datas.WriteBuffer(data, size);
326 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_QUERY_GROUPS), datas);
327 }
328
OnQueryP2pServicesFuzzTest(const uint8_t * data,size_t size)329 void OnQueryP2pServicesFuzzTest(const uint8_t* data, size_t size)
330 {
331 MessageParcel datas;
332 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
333 LOGE("WriteInterfaceToken failed!");
334 return;
335 }
336 datas.WriteInt32(0);
337 datas.WriteBuffer(data, size);
338 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_QUERY_SERVICES), datas);
339 }
340
OnRegisterCallBackFuzzTest(const uint8_t * data,size_t size)341 void OnRegisterCallBackFuzzTest(const uint8_t* data, size_t size)
342 {
343 MessageParcel datas;
344 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
345 LOGE("WriteInterfaceToken failed!");
346 return;
347 }
348 datas.WriteInt32(0);
349 datas.WriteBuffer(data, size);
350 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_REGISTER_CALLBACK), datas);
351 }
352
OnSetP2pDeviceNameFuzzTest(const uint8_t * data,size_t size)353 void OnSetP2pDeviceNameFuzzTest(const uint8_t* data, size_t size)
354 {
355 MessageParcel datas;
356 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
357 LOGE("WriteInterfaceToken failed!");
358 return;
359 }
360 datas.WriteInt32(0);
361 datas.WriteBuffer(data, size);
362 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_SET_DEVICE_NAME), datas);
363 }
364
OnSetP2pWfdInfoFuzzTest(const uint8_t * data,size_t size)365 void OnSetP2pWfdInfoFuzzTest(const uint8_t* data, size_t size)
366 {
367 MessageParcel datas;
368 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
369 LOGE("WriteInterfaceToken failed!");
370 return;
371 }
372 datas.WriteInt32(0);
373 datas.WriteBuffer(data, size);
374 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_SET_WFD_INFO), datas);
375 }
376
OnHid2dRequestGcIpFuzzTest(const uint8_t * data,size_t size)377 void OnHid2dRequestGcIpFuzzTest(const uint8_t* data, size_t size)
378 {
379 MessageParcel datas;
380 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
381 LOGE("WriteInterfaceToken failed!");
382 return;
383 }
384 datas.WriteInt32(0);
385 datas.WriteBuffer(data, size);
386 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_HID2D_APPLY_IP), datas);
387 }
388
OnHid2dSharedlinkIncreaseFuzzTest(const uint8_t * data,size_t size)389 void OnHid2dSharedlinkIncreaseFuzzTest(const uint8_t* data, size_t size)
390 {
391 MessageParcel datas;
392 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
393 LOGE("WriteInterfaceToken failed!");
394 return;
395 }
396 datas.WriteInt32(0);
397 datas.WriteBuffer(data, size);
398 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_HID2D_SHARED_LINK_INCREASE), datas);
399 }
400
OnHid2dSharedlinkDecreaseFuzzTest(const uint8_t * data,size_t size)401 void OnHid2dSharedlinkDecreaseFuzzTest(const uint8_t* data, size_t size)
402 {
403 MessageParcel datas;
404 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
405 LOGE("WriteInterfaceToken failed!");
406 return;
407 }
408 datas.WriteInt32(0);
409 datas.WriteBuffer(data, size);
410 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_HID2D_SHARED_LINK_DECREASE), datas);
411 }
412
413
OnHid2dCreateGroupFuzzTest(const uint8_t * data,size_t size)414 void OnHid2dCreateGroupFuzzTest(const uint8_t* data, size_t size)
415 {
416 MessageParcel datas;
417 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
418 LOGE("WriteInterfaceToken failed!");
419 return;
420 }
421 datas.WriteInt32(0);
422 datas.WriteBuffer(data, size);
423 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_HID2D_CREATE_GROUP), datas);
424 }
425
OnHid2dRemoveGcGroupFuzzTest(const uint8_t * data,size_t size)426 void OnHid2dRemoveGcGroupFuzzTest(const uint8_t* data, size_t size)
427 {
428 MessageParcel datas;
429 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
430 LOGE("WriteInterfaceToken failed!");
431 return;
432 }
433 datas.WriteInt32(0);
434 datas.WriteBuffer(data, size);
435 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_HID2D_REMOVE_GC_GROUP), datas);
436 }
OnHid2dConnectFuzzTest(const uint8_t * data,size_t size)437 void OnHid2dConnectFuzzTest(const uint8_t* data, size_t size)
438 {
439 MessageParcel datas;
440 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
441 LOGE("WriteInterfaceToken failed!");
442 return;
443 }
444 datas.WriteInt32(0);
445 datas.WriteBuffer(data, size);
446 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_HID2D_CONNECT), datas);
447 }
448
OnHid2dConfigIPAddrFuzzTest(const uint8_t * data,size_t size)449 void OnHid2dConfigIPAddrFuzzTest(const uint8_t* data, size_t size)
450 {
451 MessageParcel datas;
452 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
453 LOGE("WriteInterfaceToken failed!");
454 return;
455 }
456 datas.WriteInt32(0);
457 datas.WriteBuffer(data, size);
458 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_HID2D_CONFIG_IP), datas);
459 }
460
OnHid2dReleaseIPAddrFuzzTest(const uint8_t * data,size_t size)461 void OnHid2dReleaseIPAddrFuzzTest(const uint8_t* data, size_t size)
462 {
463 MessageParcel datas;
464 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
465 LOGE("WriteInterfaceToken failed!");
466 return;
467 }
468 datas.WriteInt32(0);
469 datas.WriteBuffer(data, size);
470 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_HID2D_RELEASE_IP), datas);
471 }
472
OnHid2dGetRecommendChannelFuzzTest(const uint8_t * data,size_t size)473 void OnHid2dGetRecommendChannelFuzzTest(const uint8_t* data, size_t size)
474 {
475 MessageParcel datas;
476 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
477 LOGE("WriteInterfaceToken failed!");
478 return;
479 }
480 datas.WriteInt32(0);
481 datas.WriteBuffer(data, size);
482 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_GET_P2P_RECOMMENDED_CHANNEL), datas);
483 }
484
OnHid2dGetChannelListFor5GFuzzTest(const uint8_t * data,size_t size)485 void OnHid2dGetChannelListFor5GFuzzTest(const uint8_t* data, size_t size)
486 {
487 MessageParcel datas;
488 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
489 LOGE("WriteInterfaceToken failed!");
490 return;
491 }
492 datas.WriteInt32(0);
493 datas.WriteBuffer(data, size);
494 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_GET_5G_CHANNEL_LIST), datas);
495 }
496
OnHid2dGetSelfWifiCfgInfoFuzzTest(const uint8_t * data,size_t size)497 void OnHid2dGetSelfWifiCfgInfoFuzzTest(const uint8_t* data, size_t size)
498 {
499 MessageParcel datas;
500 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
501 LOGE("WriteInterfaceToken failed!");
502 return;
503 }
504 datas.WriteInt32(0);
505 datas.WriteBuffer(data, size);
506 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_GET_SELF_WIFI_CFG), datas);
507 }
508
OnHid2dSetPeerWifiCfgInfoFuzzTest(const uint8_t * data,size_t size)509 void OnHid2dSetPeerWifiCfgInfoFuzzTest(const uint8_t* data, size_t size)
510 {
511 MessageParcel datas;
512 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
513 LOGE("WriteInterfaceToken failed!");
514 return;
515 }
516 datas.WriteInt32(0);
517 datas.WriteBuffer(data, size);
518 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_SET_PEER_WIFI_CFG), datas);
519 }
OnQueryP2pLocalDeviceFuzzTest(const uint8_t * data,size_t size)520 void OnQueryP2pLocalDeviceFuzzTest(const uint8_t* data, size_t size)
521 {
522 MessageParcel datas;
523 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
524 LOGE("WriteInterfaceToken failed!");
525 return;
526 }
527 datas.WriteInt32(0);
528 datas.WriteBuffer(data, size);
529 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_QUERY_LOCAL_DEVICE), datas);
530 }
531
OnHid2dSetUpperSceneFuzzTest(const uint8_t * data,size_t size)532 void OnHid2dSetUpperSceneFuzzTest(const uint8_t* data, size_t size)
533 {
534 MessageParcel datas;
535 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
536 LOGE("WriteInterfaceToken failed!");
537 return;
538 }
539 datas.WriteInt32(0);
540 datas.WriteBuffer(data, size);
541 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_SET_UPPER_SCENE), datas);
542 }
543
DoSomethingInterestingWithMyAPIS(const uint8_t * data,size_t size)544 void DoSomethingInterestingWithMyAPIS(const uint8_t* data, size_t size)
545 {
546 MessageParcel datas;
547 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
548 LOGE("WriteInterfaceToken failed!");
549 return;
550 }
551 datas.WriteInt32(0);
552 datas.WriteBuffer(data, size);
553 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_ENABLE), datas);
554 }
555
DoSomethingInterestingWithMyAPI(const uint8_t * data,size_t size)556 void DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size)
557 {
558 MessageParcel datas;
559 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
560 LOGE("WriteInterfaceToken failed!");
561 return;
562 }
563 datas.WriteInt32(0);
564 datas.WriteBuffer(data, size);
565 OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_DISABLE), datas);
566 }
567
OnEnableWifiFuzzTest(const uint8_t * data,size_t size)568 void OnEnableWifiFuzzTest(const uint8_t* data, size_t size)
569 {
570 MessageParcel datas;
571 datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN_DEVICE);
572 datas.WriteInt32(0);
573 datas.WriteBuffer(data, size);
574 MessageParcel reply;
575 MessageOption option;
576 pWifiDeviceStub->OnRemoteRequest(static_cast<uint32_t>(DevInterfaceCode::WIFI_SVR_CMD_ENABLE_WIFI),
577 datas, reply, option);
578 }
579
OnDisableWifiFuzzTest(const uint8_t * data,size_t size)580 void OnDisableWifiFuzzTest(const uint8_t* data, size_t size)
581 {
582 MessageParcel datas;
583 datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN_DEVICE);
584 datas.WriteInt32(0);
585 datas.WriteBuffer(data, size);
586 MessageParcel reply;
587 MessageOption option;
588 pWifiDeviceStub->OnRemoteRequest(static_cast<uint32_t>(DevInterfaceCode::WIFI_SVR_CMD_DISABLE_WIFI),
589 datas, reply, option);
590 }
591
OnDiscoverPeersFuzzTest(const uint8_t * data,size_t size)592 void OnDiscoverPeersFuzzTest(const uint8_t* data, size_t size)
593 {
594 MessageParcel datas;
595 datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN_DEVICE);
596 datas.WriteInt32(0);
597 datas.WriteBuffer(data, size);
598 MessageParcel reply;
599 MessageOption option;
600 pWifiDeviceStub->OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_DISCOVER_PEERS),
601 datas, reply, option);
602 }
603
OnDisableRandomMacFuzzTest(const uint8_t * data,size_t size)604 void OnDisableRandomMacFuzzTest(const uint8_t* data, size_t size)
605 {
606 MessageParcel datas;
607 datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN_DEVICE);
608 datas.WriteInt32(0);
609 datas.WriteBuffer(data, size);
610 MessageParcel reply;
611 MessageOption option;
612 pWifiDeviceStub->OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_DISABLE_RANDOM_MAC),
613 datas, reply, option);
614 }
615
OnCheckCanUseP2pFuzzTest(const uint8_t * data,size_t size)616 void OnCheckCanUseP2pFuzzTest(const uint8_t* data, size_t size)
617 {
618 MessageParcel datas;
619 datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN_DEVICE);
620 datas.WriteInt32(0);
621 datas.WriteBuffer(data, size);
622 MessageParcel reply;
623 MessageOption option;
624 pWifiDeviceStub->OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_CHECK_CAN_USE_P2P),
625 datas, reply, option);
626 }
627
Hid2dIsWideBandwidthSupportedFuzzTest(const uint8_t * data,size_t size)628 void Hid2dIsWideBandwidthSupportedFuzzTest(const uint8_t* data, size_t size)
629 {
630 MessageParcel datas;
631 datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN_DEVICE);
632 datas.WriteInt32(0);
633 datas.WriteBuffer(data, size);
634 MessageParcel reply;
635 MessageOption option;
636 pWifiDeviceStub->OnRemoteRequest(static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_HID2D_WIDE_SUPPORTED),
637 datas, reply, option);
638 }
639
WifiP2pServiceImplFuzzTest(const uint8_t * data,size_t size)640 void WifiP2pServiceImplFuzzTest(const uint8_t* data, size_t size)
641 {
642 WifiP2pServiceInfo srvInfo;
643 std::string serviceName = std::string(reinterpret_cast<const char*>(data), size);
644 std::string mDeviceAddress = std::string(reinterpret_cast<const char*>(data), size);
645 srvInfo.SetServiceName(serviceName);
646 srvInfo.SetDeviceAddress(mDeviceAddress);
647
648 WifiP2pDevice device;
649 if (size >= THREE) {
650 int index = 0;
651 std::string deviceName = std::string(reinterpret_cast<const char*>(data), size);
652 std::string networkName = std::string(reinterpret_cast<const char*>(data), size);
653 std::string mDeviceAddress = std::string(reinterpret_cast<const char*>(data), size);
654 std::string primaryDeviceType = std::string(reinterpret_cast<const char*>(data), size);
655 std::string secondaryDeviceType = std::string(reinterpret_cast<const char*>(data), size);
656 unsigned int supportWpsConfigMethods = static_cast<unsigned int>(data[index++]);
657 int deviceCapabilitys = static_cast<int>(data[index++]);
658 int groupCapabilitys = static_cast<int>(data[index++]);
659 device.SetDeviceName(deviceName);
660 device.SetNetworkName(networkName);
661 device.SetDeviceAddress(mDeviceAddress);
662 device.SetPrimaryDeviceType(primaryDeviceType);
663 device.SetSecondaryDeviceType(secondaryDeviceType);
664 device.SetWpsConfigMethod(supportWpsConfigMethods);
665 device.SetDeviceCapabilitys(deviceCapabilitys);
666 device.SetGroupCapabilitys(groupCapabilitys);
667 }
668 WifiP2pGroupInfo group;
669 if (size >= THREE) {
670 std::string passphrase = std::string(reinterpret_cast<const char*>(data), size);
671 std::string interface = std::string(reinterpret_cast<const char*>(data), size);
672 std::string groupName = std::string(reinterpret_cast<const char*>(data), size);
673 int frequency = static_cast<int>(data[0]);
674
675 group.SetPassphrase(passphrase);
676 group.SetInterface(interface);
677 group.SetGroupName(groupName);
678 group.SetFrequency(frequency);
679 }
680 MessageParcel datas;
681 if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) {
682 LOGE("WriteInterfaceToken failed!");
683 return;
684 }
685 datas.WriteInt32(0);
686 datas.WriteBuffer(data, size);
687 OnRemoteRequest(static_cast<uint32_t>(DevInterfaceCode::WIFI_SVR_CMD_GET_SUPPORTED_FEATURES), datas);
688 pWifiP2pServiceImpl->WriteWifiP2pServiceInfo(datas, srvInfo);
689 pWifiP2pServiceImpl->WriteWifiP2pDeviceData(datas, device);
690 pWifiP2pServiceImpl->WriteWifiP2pGroupData(datas, group, false);
691 pWifiP2pServiceImpl->WriteWifiP2pServiceInfo(datas, srvInfo);
692 }
693
OnGetSupportChanForBandTest(const uint8_t * data,size_t size)694 void OnGetSupportChanForBandTest(const uint8_t* data, size_t size)
695 {
696 MessageParcel datas;
697 datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN);
698 datas.WriteInt32(0);
699 datas.WriteBuffer(data, size);
700 MessageParcel reply;
701 MessageOption option;
702 pWifiDeviceStub->OnRemoteRequest(
703 static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_P2P_GET_SUPPORT_CHANN_FOR_BAND),
704 datas, reply, option);
705 }
706
OnSetP2pHighPerfTest(const uint8_t * data,size_t size)707 void OnSetP2pHighPerfTest(const uint8_t* data, size_t size)
708 {
709 MessageParcel datas;
710 datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN);
711 datas.WriteInt32(0);
712 datas.WriteBuffer(data, size);
713 MessageParcel reply;
714 MessageOption option;
715 pWifiDeviceStub->OnRemoteRequest(
716 static_cast<uint32_t>(P2PInterfaceCode::WIFI_SVR_CMD_SET_P2P_HIGH_PERF_MODE),
717 datas, reply, option);
718 }
719
720 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)721 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
722 {
723 if ((data == nullptr) || (size <= OHOS::Wifi::U32_AT_SIZE_ZERO)) {
724 return 0;
725 }
726 Init();
727 OHOS::Wifi::OnDiscoverDevicesFuzzTest(data, size);
728 OHOS::Wifi::OnDiscoverPeersFuzzTest(data, size);
729 OHOS::Wifi::OnDisableRandomMacFuzzTest(data, size);
730 OHOS::Wifi::OnCheckCanUseP2pFuzzTest(data, size);
731 OHOS::Wifi::OnStopDiscoverDevicesFuzzTest(data, size);
732 OHOS::Wifi::OnDiscoverServicesFuzzTest(data, size);
733 OHOS::Wifi::OnStopDiscoverServicesFuzzTest(data, size);
734 OHOS::Wifi::OnRequestServiceFuzzTest(data, size);
735 OHOS::Wifi::OnPutLocalP2pServiceFuzzTest(data, size);
736 OHOS::Wifi::OnDeleteLocalP2pServiceFuzzTest(data, size);
737 OHOS::Wifi::OnStartP2pListenFuzzTest(data, size);
738 OHOS::Wifi::OnStopP2pListenFuzzTest(data, size);
739 OHOS::Wifi::OnCreateGroupFuzzTest(data, size);
740 OHOS::Wifi::OnRemoveGroupFuzzTest(data, size);
741 OHOS::Wifi::OnDeleteGroupFuzzTest(data, size);
742 OHOS::Wifi::OnP2pConnectFuzzTest(data, size);
743 OHOS::Wifi::OnP2pCancelConnectFuzzTest(data, size);
744 OHOS::Wifi::OnQueryP2pLinkedInfoFuzzTest(data, size);
745 OHOS::Wifi::OnGetCurrentGroupFuzzTest(data, size);
746 OHOS::Wifi::OnGetP2pEnableStatusFuzzTest(data, size);
747 OHOS::Wifi::OnGetP2pDiscoverStatusFuzzTest(data, size);
748 OHOS::Wifi::OnGetP2pConnectedStatusFuzzTest(data, size);
749 OHOS::Wifi::OnQueryP2pDevicesFuzzTest(data, size);
750 OHOS::Wifi::OnQueryP2pGroupsFuzzTest(data, size);
751 OHOS::Wifi::OnQueryP2pServicesFuzzTest(data, size);
752 OHOS::Wifi::OnRegisterCallBackFuzzTest(data, size);
753 OHOS::Wifi::OnSetP2pDeviceNameFuzzTest(data, size);
754 OHOS::Wifi::OnSetP2pWfdInfoFuzzTest(data, size);
755 OHOS::Wifi::OnHid2dRequestGcIpFuzzTest(data, size);
756 OHOS::Wifi::OnHid2dSharedlinkIncreaseFuzzTest(data, size);
757 OHOS::Wifi::OnHid2dSharedlinkDecreaseFuzzTest(data, size);
758 OHOS::Wifi::OnHid2dCreateGroupFuzzTest(data, size);
759 OHOS::Wifi::OnHid2dRemoveGcGroupFuzzTest(data, size);
760 OHOS::Wifi::OnHid2dConnectFuzzTest(data, size);
761 OHOS::Wifi::OnHid2dConfigIPAddrFuzzTest(data, size);
762 OHOS::Wifi::OnHid2dReleaseIPAddrFuzzTest(data, size);
763 OHOS::Wifi::OnHid2dGetRecommendChannelFuzzTest(data, size);
764 OHOS::Wifi::OnHid2dGetChannelListFor5GFuzzTest(data, size);
765 OHOS::Wifi::OnHid2dGetSelfWifiCfgInfoFuzzTest(data, size);
766 OHOS::Wifi::OnHid2dSetPeerWifiCfgInfoFuzzTest(data, size);
767 OHOS::Wifi::OnQueryP2pLocalDeviceFuzzTest(data, size);
768 OHOS::Wifi::OnHid2dSetUpperSceneFuzzTest(data, size);
769 OHOS::Wifi::DoSomethingInterestingWithMyAPI(data, size);
770 OHOS::Wifi::WifiP2pServiceImplFuzzTest(data, size);
771 OHOS::Wifi::Hid2dIsWideBandwidthSupportedFuzzTest(data, size);
772 sleep(U32_AT_SIZE_ZERO);
773 return 0;
774 }
775 }
776 }
777