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 "wifiidlclient_fuzzer.h"
17 #include "wifi_fuzz_common_func.h"
18 
19 #include <cstddef>
20 #include <cstdint>
21 
22 #include "message_parcel.h"
23 #include "securec.h"
24 #include "define.h"
25 #include "i_wifi.h"
26 #include "i_wifi_chip.h"
27 #include "i_wifi_iface.h"
28 #include "i_wifi_p2p_iface.h"
29 #include "i_wifi_sta_iface.h"
30 #include "i_wifi_supplicant_iface.h"
31 #include "i_wifi_hotspot_iface.h"
32 #include "wifi_idl_client.h"
33 #include "wifi_log.h"
34 
35 namespace OHOS {
36 namespace Wifi {
OnIWifiTest(const uint8_t * data,size_t size)37 void OnIWifiTest(const uint8_t* data, size_t size)
38 {
39     Start();
40     Stop();
41     NotifyClear();
42 }
43 
OnIWifiChipTest(const uint8_t * data,size_t size)44 void OnIWifiChipTest(const uint8_t* data, size_t size)
45 {
46     bool isSupport = true;
47     IsChipSupportDbdc(&isSupport);
48     IsChipSupportCsa(&isSupport);
49     IsChipSupportRadarDetect(&isSupport);
50     IsChipSupportDfsChannel(&isSupport);
51     IsChipSupportIndoorChannel(&isSupport);
52 
53     int32_t id = 1;
54     GetChipId(&id);
55     ConfigComboModes(id);
56     GetComboModes(&id);
57 }
58 
OnIWifiIfaceTest(const uint8_t * data,size_t size)59 void OnIWifiIfaceTest(const uint8_t* data, size_t size)
60 {
61     char ifname[] = "OHOS_wifi";
62     int32_t datas = 0;
63     GetName(ifname, datas);
64 
65     int32_t type = 0;
66     GetType(&type);
67 }
68 
OnIWifiP2pIfaceTest(const uint8_t * data,size_t size)69 void OnIWifiP2pIfaceTest(const uint8_t* data, size_t size)
70 {
71     P2pStart();
72     P2pStop();
73     P2pFlush();
74     P2pFlushService();
75     P2pSaveConfig();
76     P2pStopFind();
77     P2pCancelConnect();
78 
79     int datas = 0;
80     P2pSetRandomMac(datas);
81     P2pRemoveNetwork(datas);
82     P2pSetWfdEnable(datas);
83     P2pStartFind(datas);
84     P2pSetMiracastType(datas);
85     P2pSetPersistentReconnect(datas);
86     P2pSetServDiscExternal(datas);
87     P2pAddNetwork(&datas);
88 
89     const char* chardata;
90     P2pSetDeviceName(chardata);
91     P2pSetSsidPostfixName(chardata);
92     P2pSetWpsDeviceType(chardata);
93     P2pSetWpsSecondaryDeviceType(chardata);
94     P2pSetWpsConfigMethods(chardata);
95     P2pSetWfdDeviceConfig(chardata);
96     P2pRemoveGroup(chardata);
97     P2pCancelServiceDiscovery(chardata);
98 
99     P2pSetGroupMaxIdle(chardata, datas);
100     P2pSetPowerSave(chardata, datas);
101     P2pProvisionDiscovery(chardata, datas);
102 
103     const char address[] = {0x55, 0x44, 0x33, 0x22, 0x11, 0x00};
104     P2pSetupWpsPbc(chardata, address);
105 
106     char deviceAddress[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
107     P2pGetDeviceAddress(deviceAddress, datas);
108 
109     int data1 = 1;
110     int data2 = 2;
111     P2pSetExtListen(datas, data1, data2);
112     P2pSetListenChannel(data1, data2);
113     P2pAddGroup(datas, data1, data2);
114 
115     P2pReinvoke(datas, chardata);
116 }
117 
OnIWifiStaIfaceTest(const uint8_t * data,size_t size)118 void OnIWifiStaIfaceTest(const uint8_t* data, size_t size)
119 {
120     SaveNetworkConfig();
121     StopPnoScan();
122     StopWps();
123     WpaBlocklistClear();
124 
125     bool mode = false;
126     SetSuspendMode(mode);
127     SetPowerMode(mode);
128 
129     int networkId = 0;
130     RemoveNetwork(networkId);
131     AddNetwork(&networkId);
132     EnableNetwork(networkId);
133     DisableNetwork(networkId);
134     WpaAutoConnect(networkId);
135     GetScanInfos(&networkId);
136 
137     unsigned char mac[] = {0x55, 0x44, 0x33, 0x22, 0x11, 0x00};
138     int lenmac = 6;
139     GetDeviceMacAddress(mac, &lenmac);
140     SetScanningMacAddress(mac, lenmac);
141     DeauthLastRoamingBssid(mac, lenmac);
142 
143     const int porttype = 1;
144     SetAssocMacAddr(mac, lenmac, porttype);
145 }
146 
OnIWifiSupplicantIfaceTest(const uint8_t * data,size_t size)147 void OnIWifiSupplicantIfaceTest(const uint8_t* data, size_t size)
148 {
149     StartSupplicant();
150     StopSupplicant();
151     ConnectSupplicant();
152     DisconnectSupplicant();
153     Reconnect();
154     Reassociate();
155     Disconnect();
156 
157     int networkId = 1;
158     Connect(networkId);
159 
160     int enable = 1;
161     SetPowerSave(enable);
162 }
163 
OnIWifiHotSpotIfaceTest(const uint8_t * data,size_t size)164 void OnIWifiHotSpotIfaceTest(const uint8_t* data, size_t size)
165 {
166     int id = 0;
167     char ifaceName[] = "p2p0";
168     StartSoftAp(id, ifaceName);
169     StopSoftAp(id);
170 
171     int model = 1;
172     WpaSetPowerModel(model, id);
173     WpaGetPowerModel(&model, id);
174 
175     const char *code = "CN";
176     SetCountryCode(code, id);
177 
178     unsigned char mac[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
179     int lenmac = 6;
180     SetMacFilter(mac, lenmac, id);
181     DelMacFilter(mac, lenmac, id);
182     DisassociateSta(mac, lenmac, id);
183 }
184 
OnWifiIdlClientTest(const uint8_t * data,size_t size)185 void OnWifiIdlClientTest(const uint8_t* data, size_t size)
186 {
187     WifiIdlClient wifiClient;
188     wifiClient.ExitAllClient();
189     wifiClient.StartWifi();
190     wifiClient.StopWifi();
191     wifiClient.ReqReconnect();
192     wifiClient.ReqReassociate();
193     wifiClient.ReqDisconnect();
194     wifiClient.ReqStopPnoScan();
195     wifiClient.ClearDeviceConfig();
196     wifiClient.SaveDeviceConfig();
197     wifiClient.ReqStopWps();
198     wifiClient.ReqStartSupplicant();
199     wifiClient.ReqStopSupplicant();
200     wifiClient.ReqConnectSupplicant();
201     wifiClient.ReqDisconnectSupplicant();
202     wifiClient.ReqUnRegisterSupplicantEventCallback();
203     wifiClient.ReqWpaBlocklistClear();
204     wifiClient.ReqP2pStart();
205     wifiClient.ReqP2pStop();
206     wifiClient.ReqP2pStopFind();
207     wifiClient.ReqP2pFlush();
208     wifiClient.ReqP2pCancelConnect();
209     wifiClient.ReqP2pFlushService();
210     wifiClient.ReqP2pSaveConfig();
211 
212     int networkId = 1;
213     wifiClient.ReqConnect(networkId);
214     wifiClient.RemoveDevice(networkId);
215     wifiClient.ReqEnableNetwork(networkId);
216     wifiClient.ReqDisableNetwork(networkId);
217     wifiClient.ReqP2pRemoveNetwork(networkId);
218 }
219 
DoSomethingInterestingWithMyAPI(const uint8_t * data,size_t size)220 bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size)
221 {
222     OnIWifiTest(data, size);
223     OnIWifiChipTest(data, size);
224     OnIWifiIfaceTest(data, size);
225     OnIWifiP2pIfaceTest(data, size);
226     OnIWifiStaIfaceTest(data, size);
227     OnIWifiSupplicantIfaceTest(data, size);
228     OnIWifiHotSpotIfaceTest(data, size);
229     OnWifiIdlClientTest(data, size);
230     return true;
231 }
232 
233 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)234 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
235 {
236     OHOS::Wifi::DoSomethingInterestingWithMyAPI(data, size);
237     return 0;
238 }
239 }
240 }