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 }