• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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