1 /*
2 * Copyright (C) 2024 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 #include <cstddef>
16 #include <cstdint>
17 #include <unistd.h>
18 #include <string>
19 #include "dhcpclientfun_fuzzer.h"
20 #include "dhcp_client_state_machine.h"
21 #include "dhcp_ipv6_client.h"
22 #include "dhcp_socket.h"
23 #include "securec.h"
24 #include <linux/rtnetlink.h>
25 #include <netinet/icmp6.h>
26
27 namespace OHOS {
28 namespace DHCP {
29 std::string g_ifname = "wlan0";
30 constexpr size_t DHCP_SLEEP_2 = 2;
31 constexpr int TWO = 2;
32 constexpr int THREE = 3;
33 constexpr size_t U32_AT_SIZE_ZERO = 4;
34 std::unique_ptr<OHOS::DHCP::DhcpClientStateMachine> dhcpClient =
35 std::make_unique<OHOS::DHCP::DhcpClientStateMachine>(g_ifname);
36 std::unique_ptr<OHOS::DHCP::DhcpIpv6Client> ipv6Client = std::make_unique<OHOS::DHCP::DhcpIpv6Client>("wlan0");
37
DhcpClientStateMachineFunFuzzerTest(const uint8_t *data, size_t size)38 bool DhcpClientStateMachineFunFuzzerTest(const uint8_t *data, size_t size)
39 {
40 if (dhcpClient == nullptr) {
41 return false;
42 }
43 time_t curTimestamp = time(nullptr);
44 if (curTimestamp == static_cast<time_t>(-1)) {
45 return false;
46 }
47 dhcpClient->DhcpRequestHandle(curTimestamp);
48 sleep(DHCP_SLEEP_2);
49 dhcpClient->DhcpResponseHandle(curTimestamp);
50 return true;
51 }
52
DhcpIpv6FunFuzzerTest(const uint8_t *data, size_t size)53 bool DhcpIpv6FunFuzzerTest(const uint8_t *data, size_t size)
54 {
55 if (ipv6Client == nullptr) {
56 return false;
57 }
58 if (data == nullptr) {
59 return false;
60 }
61 if (size <= 0) {
62 return false;
63 }
64 ipv6Client->handleKernelEvent(data, static_cast<int>(size));
65 return true;
66 }
67
68 /* Dhcp Ipv6 Client */
IsRunningFuzzerTest(const uint8_t *data, size_t size)69 void IsRunningFuzzerTest(const uint8_t *data, size_t size)
70 {
71 ipv6Client->IsRunning();
72 }
73
SetCallbackFuzzerTest(const uint8_t *data, size_t size)74 void SetCallbackFuzzerTest(const uint8_t *data, size_t size)
75 {
76 std::function<void(const std::string ifname, DhcpIpv6Info &info)> callback;
77 ipv6Client->SetCallback(callback);
78 }
79
StartIpv6ThreadFuzzerTest(const uint8_t *data, size_t size)80 void StartIpv6ThreadFuzzerTest(const uint8_t *data, size_t size)
81 {
82 std::string ifname = "wlan1";
83 bool isIpv6 = true;
84 ipv6Client->StartIpv6Thread(ifname, isIpv6);
85 }
86
Ipv6AddrScope2TypeFuzzerTest(const uint8_t *data, size_t size)87 void Ipv6AddrScope2TypeFuzzerTest(const uint8_t *data, size_t size)
88 {
89 unsigned int scope = static_cast<unsigned int>(data[0]);
90 ipv6Client->ipv6AddrScope2Type(scope);
91 }
92
GetAddrTypeFuzzerTest(const uint8_t *data, size_t size)93 void GetAddrTypeFuzzerTest(const uint8_t *data, size_t size)
94 {
95 ipv6Client->getAddrType(nullptr);
96
97 struct in6_addr addr;
98 ipv6Client->getAddrType(&addr);
99
100 inet_pton(AF_INET6, "2001:0db8:85a3:0000:0000:8a2e:0370:7334", &addr);
101 ipv6Client->getAddrType(&addr);
102
103 inet_pton(AF_INET6, "ff02:0000:0000:0000:0000:0000:0000:0001", &addr);
104 ipv6Client->getAddrType(&addr);
105
106 inet_pton(AF_INET6, "fe80::", &addr);
107 ipv6Client->getAddrType(&addr);
108
109 inet_pton(AF_INET6, "fec0::", &addr);
110 ipv6Client->getAddrType(&addr);
111
112 inet_pton(AF_INET6, "::", &addr);
113 ipv6Client->getAddrType(&addr);
114
115 inet_pton(AF_INET6, "::1", &addr);
116 ipv6Client->getAddrType(&addr);
117
118 inet_pton(AF_INET6, "::ffff:192.0.2.128", &addr);
119 ipv6Client->getAddrType(&addr);
120
121 inet_pton(AF_INET6, "::ffff:192.0.2.128", &addr);
122 ipv6Client->getAddrType(&addr);
123 }
124
GetAddrScopeFuzzerTest(const uint8_t *data, size_t size)125 void GetAddrScopeFuzzerTest(const uint8_t *data, size_t size)
126 {
127 ipv6Client->getAddrType(nullptr);
128
129 struct in6_addr addr;
130 ipv6Client->getAddrScope(&addr);
131 }
132
GetIpv6PrefixFuzzerTest(const uint8_t *data, size_t size)133 void GetIpv6PrefixFuzzerTest(const uint8_t *data, size_t size)
134 {
135 char ipv6Addr[DHCP_INET6_ADDRSTRLEN] = "1122:2233:3344:0000:0000:4433:3322:2211";
136 char ipv6PrefixBuf[DHCP_INET6_ADDRSTRLEN] = {0};
137 uint8_t prefixLen = static_cast<uint8_t>(data[0]);
138 ipv6Client->GetIpv6Prefix(nullptr, nullptr, prefixLen);
139 ipv6Client->GetIpv6Prefix(ipv6Addr, ipv6PrefixBuf, prefixLen);
140 }
141
GetIpFromS6AddressFuzzerTest(const uint8_t *data, size_t size)142 void GetIpFromS6AddressFuzzerTest(const uint8_t *data, size_t size)
143 {
144 int family = static_cast<int>(data[0]);
145 int buflen = static_cast<int>(data[0]);
146 struct in6_addr addr;
147 char buf[INET6_ADDRSTRLEN] = {0};
148 ipv6Client->GetIpFromS6Address(&addr, family, buf, buflen);
149 }
150
OnIpv6AddressAddEventFuzzerTest(const uint8_t *data, size_t size)151 void OnIpv6AddressAddEventFuzzerTest(const uint8_t *data, size_t size)
152 {
153 int prefixLen = static_cast<int>(data[0]);
154 int ifaIndex = static_cast<int>(data[0]);
155 ipv6Client->onIpv6AddressAddEvent(nullptr, prefixLen, ifaIndex);
156
157 struct in6_addr data1;
158 ipv6Client->onIpv6AddressAddEvent(&data1, prefixLen, ifaIndex);
159 }
160
AddIpv6AddressFuzzerTest(const uint8_t *data, size_t size)161 void AddIpv6AddressFuzzerTest(const uint8_t *data, size_t size)
162 {
163 int len = static_cast<int>(data[0]);
164 ipv6Client->AddIpv6Address(nullptr, len);
165 }
166
OnIpv6DnsAddEventFuzzerTest(const uint8_t *data, size_t size)167 void OnIpv6DnsAddEventFuzzerTest(const uint8_t *data, size_t size)
168 {
169 int len = static_cast<int>(data[0]);
170 int ifaIndex = static_cast<int>(data[0]);
171 ipv6Client->onIpv6DnsAddEvent(nullptr, len, ifaIndex);
172
173 struct nd_opt_hdr data1;
174 ipv6Client->onIpv6DnsAddEvent(&data1, len, ifaIndex);
175 }
176
OnIpv6RouteAddEventFuzzerTest(const uint8_t *data, size_t size)177 void OnIpv6RouteAddEventFuzzerTest(const uint8_t *data, size_t size)
178 {
179 char *gateway = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
180 char *dst = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
181 int ifaIndex = static_cast<int>(data[0]);
182 ipv6Client->onIpv6RouteAddEvent(gateway, dst, ifaIndex);
183 }
184
CreateKernelSocketFuzzerTest(const uint8_t *data, size_t size)185 void CreateKernelSocketFuzzerTest(const uint8_t *data, size_t size)
186 {
187 ipv6Client->createKernelSocket();
188 }
189
ResetFuzzerTest(const uint8_t *data, size_t size)190 void ResetFuzzerTest(const uint8_t *data, size_t size)
191 {
192 ipv6Client->Reset();
193 }
194
GetIpv6RouteAddrFuzzerTest(const uint8_t *data, size_t size)195 void GetIpv6RouteAddrFuzzerTest(const uint8_t *data, size_t size)
196 {
197 ipv6Client->getIpv6RouteAddr();
198 }
199
DhcpIPV6StopFuzzerTest(const uint8_t *data, size_t size)200 void DhcpIPV6StopFuzzerTest(const uint8_t *data, size_t size)
201 {
202 ipv6Client->DhcpIPV6Stop();
203 }
204
Ipv6TimerCallbackFuzzerTest(const uint8_t *data, size_t size)205 void Ipv6TimerCallbackFuzzerTest(const uint8_t *data, size_t size)
206 {
207 ipv6Client->Ipv6TimerCallback();
208 }
209
StartIpv6TimerFuzzerTest(const uint8_t *data, size_t size)210 void StartIpv6TimerFuzzerTest(const uint8_t *data, size_t size)
211 {
212 ipv6Client->StartIpv6Timer();
213 }
214
StopIpv6TimerFuzzerTest(const uint8_t *data, size_t size)215 void StopIpv6TimerFuzzerTest(const uint8_t *data, size_t size)
216 {
217 ipv6Client->StopIpv6Timer();
218 }
219
220 /* Dhcp Ipv6 Event */
SetSocketFilterFuzzerTest(const uint8_t *data, size_t size)221 void SetSocketFilterFuzzerTest(const uint8_t *data, size_t size)
222 {
223 ipv6Client->setSocketFilter(nullptr);
224
225 struct sockaddr_nl addr;
226 ipv6Client->setSocketFilter(&addr);
227 }
228
ParseNdUserOptMessageFuzzerTest(const uint8_t *data, size_t size)229 void ParseNdUserOptMessageFuzzerTest(const uint8_t *data, size_t size)
230 {
231 int len = static_cast<int>(data[0]);
232 ipv6Client->parseNdUserOptMessage(nullptr, len);
233
234 struct nduseroptmsg data1;
235 ipv6Client->parseNdUserOptMessage(&data1, len);
236 }
237
ParseNDRouteMessageFuzzerTest(const uint8_t *data, size_t size)238 void ParseNDRouteMessageFuzzerTest(const uint8_t *data, size_t size)
239 {
240 ipv6Client->parseNDRouteMessage(nullptr);
241
242 struct nlmsghdr msg;
243 ipv6Client->parseNDRouteMessage(&msg);
244 }
245
ParseNewneighMessageFuzzerTest(const uint8_t *data, size_t size)246 void ParseNewneighMessageFuzzerTest(const uint8_t *data, size_t size)
247 {
248 ipv6Client->parseNewneighMessage(0);
249 }
250
FillRouteDataFuzzerTest(const uint8_t *data, size_t size)251 void FillRouteDataFuzzerTest(const uint8_t *data, size_t size)
252 {
253 int len = static_cast<int>(data[0]);
254 ipv6Client->fillRouteData(nullptr, len);
255 const int nlmsgHdrsize = 16;
256 char buff[nlmsgHdrsize];
257 ipv6Client->fillRouteData(buff, len);
258 }
259
HandleKernelEventFuzzerTest(const uint8_t *data, size_t size)260 void HandleKernelEventFuzzerTest(const uint8_t *data, size_t size)
261 {
262 int len = static_cast<int>(data[0]);
263 ipv6Client->handleKernelEvent(nullptr, len);
264 }
265
266 /* Dhcp Socket */
CreateKernelSocketFuzzerTest1(const uint8_t *data, size_t size)267 void CreateKernelSocketFuzzerTest1(const uint8_t *data, size_t size)
268 {
269 int sockFd = static_cast<int>(data[0]);
270 CreateKernelSocket(&sockFd);
271 }
272
BindRawSocketFuzzerTest(const uint8_t *data, size_t size)273 void BindRawSocketFuzzerTest(const uint8_t *data, size_t size)
274 {
275 int rawFd = static_cast<int>(data[0]);
276 int ifaceIndex = static_cast<int>(data[0]);
277 uint8_t ifaceAddr[6] = {0};
278 BindRawSocket(rawFd, ifaceIndex, ifaceAddr);
279 }
280
BindKernelSocketFuzzerTest(const uint8_t *data, size_t size)281 void BindKernelSocketFuzzerTest(const uint8_t *data, size_t size)
282 {
283 int sockFd = static_cast<int>(data[0]);
284 char ifaceName[5] = {0};
285 uint32_t sockIp = static_cast<uint32_t>(data[0]);
286 int sockPort = static_cast<int>(data[0]);
287 bool bCast = true;
288 BindKernelSocket(sockFd, ifaceName, sockIp, sockPort, bCast);
289 }
290
SendDhcpPacketFuzzerTest(const uint8_t *data, size_t size)291 void SendDhcpPacketFuzzerTest(const uint8_t *data, size_t size)
292 {
293 struct DhcpPacket *sendPacket = nullptr;
294 uint32_t srcIp = static_cast<uint32_t>(data[0]);
295 uint32_t destIp = static_cast<uint32_t>(data[0]);
296 SendDhcpPacket(sendPacket, srcIp, destIp);
297 }
298
CheckReadBytesFuzzerTest(const uint8_t *data, size_t size)299 void CheckReadBytesFuzzerTest(const uint8_t *data, size_t size)
300 {
301 int count = static_cast<int>(data[0]);
302 int totLen = static_cast<int>(data[0]);
303 CheckReadBytes(count, totLen);
304 }
305
CheckUdpPacketFuzzerTest(const uint8_t *data, size_t size)306 void CheckUdpPacketFuzzerTest(const uint8_t *data, size_t size)
307 {
308 int totLen = static_cast<int>(data[0]);
309 CheckUdpPacket(nullptr, totLen);
310
311 struct UdpDhcpPacket pPacket;
312 CheckUdpPacket(&pPacket, totLen);
313
314 pPacket.ip.protocol = 0;
315 pPacket.ip.version = 0;
316 CheckUdpPacket(&pPacket, totLen);
317
318 pPacket.ip.ihl = 0;
319 CheckUdpPacket(&pPacket, totLen);
320
321 pPacket.udp.dest = 0;
322 CheckUdpPacket(&pPacket, totLen);
323
324 pPacket.udp.len = 0;
325 CheckUdpPacket(&pPacket, totLen);
326 }
327
CheckPacketIpSumFuzzerTest(const uint8_t *data, size_t size)328 void CheckPacketIpSumFuzzerTest(const uint8_t *data, size_t size)
329 {
330 int bytes = static_cast<int>(data[0]);
331 CheckPacketIpSum(nullptr, bytes);
332
333 struct UdpDhcpPacket pPacket;
334 pPacket.ip.check = static_cast<uint16_t>(data[0]);
335 CheckPacketIpSum(&pPacket, bytes);
336 }
337
CheckPacketUdpSumFuzzerTest(const uint8_t *data, size_t size)338 void CheckPacketUdpSumFuzzerTest(const uint8_t *data, size_t size)
339 {
340 int bytes = static_cast<int>(data[0]);
341 CheckPacketUdpSum(nullptr, bytes);
342
343 struct UdpDhcpPacket pPacket;
344 pPacket.udp.check = static_cast<uint16_t>(data[0]);
345 pPacket.udp.len = static_cast<uint16_t>(data[0]);
346 pPacket.ip.saddr = static_cast<uint32_t>(data[0]);
347 pPacket.ip.daddr = static_cast<uint32_t>(data[0]);
348 CheckPacketUdpSum(&pPacket, bytes);
349 }
350
GetDhcpRawPacketFuzzerTest(const uint8_t *data, size_t size)351 void GetDhcpRawPacketFuzzerTest(const uint8_t *data, size_t size)
352 {
353 int rawFd = static_cast<int>(data[0]);
354 GetDhcpRawPacket(nullptr, rawFd);
355
356 struct DhcpPacket getPacket;
357 getPacket.cookie = static_cast<int32_t>(data[0]);
358 GetDhcpRawPacket(&getPacket, rawFd);
359 }
360
361 /* Dhcp Client State Machine */
CloseSignalHandleFuzzerTest(const uint8_t *data, size_t size)362 void CloseSignalHandleFuzzerTest(const uint8_t *data, size_t size)
363 {
364 dhcpClient->m_sigSockFds[0] = 0;
365 dhcpClient->m_sigSockFds[1] = 1;
366 dhcpClient->CloseSignalHandle();
367 }
368
RunGetIPThreadFuncFuzzerTest(const uint8_t *data, size_t size)369 void RunGetIPThreadFuncFuzzerTest(const uint8_t *data, size_t size)
370 {
371 dhcpClient->m_cltCnf.getMode = 0;
372 DhcpClientStateMachine machine("wlan0");
373 dhcpClient->RunGetIPThreadFunc(machine);
374 }
375
InitConfigFuzzerTest(const uint8_t *data, size_t size)376 void InitConfigFuzzerTest(const uint8_t *data, size_t size)
377 {
378 std::string ifname = std::string(reinterpret_cast<const char *>(data), size);
379 bool isIpv6 = (static_cast<int>(data[0]) % TWO) ? true : false;
380 dhcpClient->InitConfig(ifname, isIpv6);
381 }
382
InitSpecifiedClientCfgFuzzerTest(const uint8_t *data, size_t size)383 void InitSpecifiedClientCfgFuzzerTest(const uint8_t *data, size_t size)
384 {
385 std::string ifname = std::string(reinterpret_cast<const char *>(data), size);
386 bool isIpv6 = (static_cast<int>(data[0]) % TWO) ? true : false;
387 dhcpClient->InitSpecifiedClientCfg(ifname, isIpv6);
388 }
389
GetClientNetworkInfoFuzzerTest(const uint8_t *data, size_t size)390 void GetClientNetworkInfoFuzzerTest(const uint8_t *data, size_t size)
391 {
392 dhcpClient->GetClientNetworkInfo();
393 }
394
ExitIpv4FuzzerTest(const uint8_t *data, size_t size)395 void ExitIpv4FuzzerTest(const uint8_t *data, size_t size)
396 {
397 dhcpClient->ExitIpv4();
398 }
399
StopIpv4FuzzerTest(const uint8_t *data, size_t size)400 void StopIpv4FuzzerTest(const uint8_t *data, size_t size)
401 {
402 dhcpClient->getIpTimerId = static_cast<uint32_t>(data[0]);
403 dhcpClient->m_slowArpTaskId = 1;
404 dhcpClient->StopIpv4();
405 }
406
GetActionFuzzerTest(const uint8_t *data, size_t size)407 void GetActionFuzzerTest(const uint8_t *data, size_t size)
408 {
409 dhcpClient->m_action = ActionMode::ACTION_START_NEW;
410 dhcpClient->GetAction();
411 }
412
DhcpInitFuzzerTest(const uint8_t *data, size_t size)413 void DhcpInitFuzzerTest(const uint8_t *data, size_t size)
414 {
415 dhcpClient->DhcpInit();
416 }
417
DhcpStopFuzzerTest(const uint8_t *data, size_t size)418 void DhcpStopFuzzerTest(const uint8_t *data, size_t size)
419 {
420 dhcpClient->m_dhcp4State = 1;
421 dhcpClient->DhcpStop();
422 }
423
InitSocketFdFuzzerTest(const uint8_t *data, size_t size)424 void InitSocketFdFuzzerTest(const uint8_t *data, size_t size)
425 {
426 dhcpClient->m_sockFd = -1;
427 dhcpClient->InitSocketFd();
428
429 dhcpClient->m_sockFd = 1;
430 dhcpClient->m_socketMode = SOCKET_MODE_RAW;
431 dhcpClient->InitSocketFd();
432
433 dhcpClient->m_socketMode = SOCKET_MODE_KERNEL;
434 dhcpClient->InitSocketFd();
435 }
436
GetPacketReadSockFdFuzzerTest(const uint8_t *data, size_t size)437 void GetPacketReadSockFdFuzzerTest(const uint8_t *data, size_t size)
438 {
439 dhcpClient->m_sockFd = 1;
440 dhcpClient->GetPacketReadSockFd();
441 }
442
GetSigReadSockFdFuzzerTest(const uint8_t *data, size_t size)443 void GetSigReadSockFdFuzzerTest(const uint8_t *data, size_t size)
444 {
445 dhcpClient->m_sigSockFds[0] = 1;
446 dhcpClient->GetSigReadSockFd();
447 }
448
GetDhcpTransIDFuzzerTest(const uint8_t *data, size_t size)449 void GetDhcpTransIDFuzzerTest(const uint8_t *data, size_t size)
450 {
451 dhcpClient->m_transID = 1;
452 dhcpClient->GetDhcpTransID();
453 }
454
SetSocketModeFuzzerTest(const uint8_t *data, size_t size)455 void SetSocketModeFuzzerTest(const uint8_t *data, size_t size)
456 {
457 uint32_t mode = static_cast<uint32_t>(data[0]);
458 dhcpClient->SetSocketMode(mode);
459 }
460
ExecDhcpRenewFuzzerTest(const uint8_t *data, size_t size)461 void ExecDhcpRenewFuzzerTest(const uint8_t *data, size_t size)
462 {
463 dhcpClient->m_dhcp4State = DHCP_STATE_INIT;
464 dhcpClient->ExecDhcpRenew();
465
466 dhcpClient->m_dhcp4State = DHCP_STATE_SELECTING;
467 dhcpClient->ExecDhcpRenew();
468
469 dhcpClient->m_dhcp4State = DHCP_STATE_REQUESTING;
470 dhcpClient->ExecDhcpRenew();
471
472 dhcpClient->m_dhcp4State = DHCP_STATE_RELEASED;
473 dhcpClient->ExecDhcpRenew();
474
475 dhcpClient->m_dhcp4State = DHCP_STATE_RENEWED;
476 dhcpClient->ExecDhcpRenew();
477
478 dhcpClient->m_dhcp4State = DHCP_STATE_BOUND;
479 dhcpClient->ExecDhcpRenew();
480
481 dhcpClient->m_dhcp4State = DHCP_STATE_RENEWING;
482 dhcpClient->ExecDhcpRenew();
483
484 dhcpClient->m_dhcp4State = DHCP_STATE_REBINDING;
485 dhcpClient->ExecDhcpRenew();
486 }
487
ExecDhcpReleaseFuzzerTest(const uint8_t *data, size_t size)488 void ExecDhcpReleaseFuzzerTest(const uint8_t *data, size_t size)
489 {
490 dhcpClient->ExecDhcpRelease();
491
492 dhcpClient->m_dhcp4State = DHCP_STATE_BOUND;
493 dhcpClient->ExecDhcpRelease();
494 }
495
GetRandomIdFuzzerTest(const uint8_t *data, size_t size)496 void GetRandomIdFuzzerTest(const uint8_t *data, size_t size)
497 {
498 dhcpClient->GetRandomId();
499 }
500
InitSelectingFuzzerTest(const uint8_t *data, size_t size)501 void InitSelectingFuzzerTest(const uint8_t *data, size_t size)
502 {
503 time_t timestamp = 1;
504 dhcpClient->m_transID = static_cast<uint32_t>(data[0]);
505 dhcpClient->m_requestedIp4 = static_cast<uint32_t>(data[0]);
506 dhcpClient->InitSelecting(timestamp);
507
508 dhcpClient->m_sentPacketNum = TIMEOUT_TIMES_MAX + 1;
509 dhcpClient->InitSelecting(timestamp);
510 }
511
DhcpRebootFuzzerTest(const uint8_t *data, size_t size)512 void DhcpRebootFuzzerTest(const uint8_t *data, size_t size)
513 {
514 uint32_t transid = static_cast<uint32_t>(data[0]);
515 uint32_t reqip = static_cast<uint32_t>(data[0]);
516 dhcpClient->DhcpReboot(transid, reqip);
517 }
518
SendRebootFuzzerTest(const uint8_t *data, size_t size)519 void SendRebootFuzzerTest(const uint8_t *data, size_t size)
520 {
521 uint32_t targetIp = static_cast<uint32_t>(data[0]);
522 time_t timestamp = 1;
523 dhcpClient->m_sentPacketNum = 1;
524 dhcpClient->SendReboot(targetIp, timestamp);
525
526 dhcpClient->m_sentPacketNum = TWO;
527 dhcpClient->SendReboot(targetIp, timestamp);
528 }
529
RebootFuzzerTest(const uint8_t *data, size_t size)530 void RebootFuzzerTest(const uint8_t *data, size_t size)
531 {
532 time_t timestamp = 1;
533 dhcpClient->Reboot(timestamp);
534 }
535
RequestingFuzzerTest(const uint8_t *data, size_t size)536 void RequestingFuzzerTest(const uint8_t *data, size_t size)
537 {
538 time_t timestamp = 1;
539 dhcpClient->m_sentPacketNum = TIMEOUT_TIMES_MAX + 1;
540 dhcpClient->Requesting(timestamp);
541
542 dhcpClient->m_sentPacketNum = TWO;
543 dhcpClient->m_dhcp4State = DHCP_STATE_RENEWED;
544 dhcpClient->Requesting(timestamp);
545
546 dhcpClient->m_dhcp4State = DHCP_STATE_RELEASED;
547 dhcpClient->Requesting(timestamp);
548 }
549
RenewingFuzzerTest(const uint8_t *data, size_t size)550 void RenewingFuzzerTest(const uint8_t *data, size_t size)
551 {
552 time_t timestamp = 1;
553 dhcpClient->m_dhcp4State = DHCP_STATE_RENEWING;
554 dhcpClient->Renewing(timestamp);
555
556 dhcpClient->m_dhcp4State = DHCP_STATE_RELEASED;
557 dhcpClient->Renewing(timestamp);
558 }
559
RebindingFuzzerTest(const uint8_t *data, size_t size)560 void RebindingFuzzerTest(const uint8_t *data, size_t size)
561 {
562 time_t timestamp = 1;
563 dhcpClient->m_dhcp4State = DHCP_STATE_REBINDING;
564 dhcpClient->Rebinding(timestamp);
565
566 dhcpClient->m_dhcp4State = DHCP_STATE_RELEASED;
567 dhcpClient->Rebinding(timestamp);
568 }
569
DecliningFuzzerTest(const uint8_t *data, size_t size)570 void DecliningFuzzerTest(const uint8_t *data, size_t size)
571 {
572 time_t timestamp = 1;
573 dhcpClient->Declining(timestamp);
574
575 dhcpClient->m_conflictCount = THREE;
576 dhcpClient->Declining(timestamp);
577 }
578
DhcpRequestHandleFuzzerTest(const uint8_t *data, size_t size)579 void DhcpRequestHandleFuzzerTest(const uint8_t *data, size_t size)
580 {
581 time_t timestamp = 1;
582 dhcpClient->m_dhcp4State = static_cast<int>(data[0]);
583 dhcpClient->DhcpRequestHandle(timestamp);
584 }
585
DhcpOfferPacketHandleFuzzerTest(const uint8_t *data, size_t size)586 void DhcpOfferPacketHandleFuzzerTest(const uint8_t *data, size_t size)
587 {
588 uint8_t type = static_cast<uint8_t>(data[0]);
589 struct DhcpPacket packet;
590 time_t timestam = 1;
591 dhcpClient->DhcpOfferPacketHandle(type, nullptr, timestam);
592 dhcpClient->DhcpOfferPacketHandle(type, &packet, timestam);
593 }
594
ParseNetworkServerIdInfoFuzzerTest(const uint8_t *data, size_t size)595 void ParseNetworkServerIdInfoFuzzerTest(const uint8_t *data, size_t size)
596 {
597 dhcpClient->ParseNetworkServerIdInfo(nullptr, nullptr);
598
599 struct DhcpPacket packet;
600 struct DhcpIpResult result;
601 dhcpClient->ParseNetworkServerIdInfo(&packet, &result);
602 }
603
ParseNetworkDnsInfoFuzzerTest(const uint8_t *data, size_t size)604 void ParseNetworkDnsInfoFuzzerTest(const uint8_t *data, size_t size)
605 {
606 dhcpClient->ParseNetworkDnsInfo(nullptr, nullptr);
607
608 struct DhcpPacket packet;
609 struct DhcpIpResult result;
610 dhcpClient->ParseNetworkDnsInfo(&packet, &result);
611 }
612
ParseNetworkDnsValueFuzzerTest(const uint8_t *data, size_t size)613 void ParseNetworkDnsValueFuzzerTest(const uint8_t *data, size_t size)
614 {
615 struct DhcpIpResult result;
616 uint32_t uData = static_cast<uint32_t>(data[0]);
617 size_t len = static_cast<size_t>(data[0]);
618 int count = static_cast<int>(data[0]);
619 dhcpClient->ParseNetworkDnsValue(nullptr, uData, len, count);
620 dhcpClient->ParseNetworkDnsValue(&result, uData, len, count);
621 }
622
ParseNetworkInfoFuzzerTest(const uint8_t *data, size_t size)623 void ParseNetworkInfoFuzzerTest(const uint8_t *data, size_t size)
624 {
625 dhcpClient->ParseNetworkInfo(nullptr, nullptr);
626
627 struct DhcpPacket packet;
628 struct DhcpIpResult result;
629 dhcpClient->ParseNetworkInfo(&packet, &result);
630 }
631
FormatStringFuzzerTest(const uint8_t *data, size_t size)632 void FormatStringFuzzerTest(const uint8_t *data, size_t size)
633 {
634 dhcpClient->FormatString(nullptr);
635
636 struct DhcpIpResult result;
637 memset_s(result.strYiaddr, sizeof(result.strYiaddr), 0, sizeof(result.strYiaddr));
638 dhcpClient->FormatString(&result);
639
640 memset_s(result.strOptServerId, sizeof(result.strOptServerId), 0, sizeof(result.strOptServerId));
641 dhcpClient->FormatString(&result);
642
643 memset_s(result.strOptSubnet, sizeof(result.strOptSubnet), 0, sizeof(result.strOptSubnet));
644 dhcpClient->FormatString(&result);
645
646 memset_s(result.strOptDns1, sizeof(result.strOptDns1), 0, sizeof(result.strOptDns1));
647 dhcpClient->FormatString(&result);
648
649 memset_s(result.strOptDns2, sizeof(result.strOptDns2), 0, sizeof(result.strOptDns2));
650 dhcpClient->FormatString(&result);
651
652 memset_s(result.strOptRouter1, sizeof(result.strOptRouter1), 0, sizeof(result.strOptRouter1));
653 dhcpClient->FormatString(&result);
654
655 memset_s(result.strOptRouter2, sizeof(result.strOptRouter2), 0, sizeof(result.strOptRouter2));
656 dhcpClient->FormatString(&result);
657
658 memset_s(result.strOptVendor, sizeof(result.strOptVendor), 0, sizeof(result.strOptVendor));
659 dhcpClient->FormatString(&result);
660 }
661
GetDHCPServerHostNameFuzzerTest(const uint8_t *data, size_t size)662 void GetDHCPServerHostNameFuzzerTest(const uint8_t *data, size_t size)
663 {
664 dhcpClient->GetDHCPServerHostName(nullptr, nullptr);
665
666 struct DhcpPacket packet;
667 struct DhcpIpResult result;
668 dhcpClient->GetDHCPServerHostName(&packet, &result);
669 }
670
ParseNetworkVendorInfoFuzzerTest(const uint8_t *data, size_t size)671 void ParseNetworkVendorInfoFuzzerTest(const uint8_t *data, size_t size)
672 {
673 dhcpClient->ParseNetworkVendorInfo(nullptr, nullptr);
674
675 struct DhcpPacket packet;
676 struct DhcpIpResult result;
677 dhcpClient->ParseNetworkVendorInfo(&packet, &result);
678 }
679
DhcpAckOrNakPacketHandleFuzzerTest(const uint8_t *data, size_t size)680 void DhcpAckOrNakPacketHandleFuzzerTest(const uint8_t *data, size_t size)
681 {
682 uint8_t type = static_cast<uint8_t>(data[0]);
683 struct DhcpPacket packet;
684 time_t timestamp = 1;
685 dhcpClient->DhcpAckOrNakPacketHandle(type, nullptr, timestamp);
686 dhcpClient->DhcpAckOrNakPacketHandle(type, &packet, timestamp);
687 }
688
ParseDhcpAckPacketFuzzerTest(const uint8_t *data, size_t size)689 void ParseDhcpAckPacketFuzzerTest(const uint8_t *data, size_t size)
690 {
691 dhcpClient->ParseDhcpAckPacket(nullptr, 1);
692
693 struct DhcpPacket packet;
694 time_t timestamp = 1;
695 dhcpClient->ParseDhcpAckPacket(&packet, timestamp);
696 }
697
ParseDhcpNakPacketFuzzerTest(const uint8_t *data, size_t size)698 void ParseDhcpNakPacketFuzzerTest(const uint8_t *data, size_t size)
699 {
700 dhcpClient->ParseDhcpNakPacket(nullptr, 1);
701
702 struct DhcpPacket packet;
703 time_t timestamp = 1;
704 dhcpClient->ParseDhcpNakPacket(&packet, timestamp);
705 }
706
GetDhcpOfferFuzzerTest(const uint8_t *data, size_t size)707 void GetDhcpOfferFuzzerTest(const uint8_t *data, size_t size)
708 {
709 dhcpClient->GetDhcpOffer(nullptr, 1);
710
711 struct DhcpPacket packet;
712 dhcpClient->GetDhcpOffer(&packet, 1);
713 }
714
DhcpResponseHandleFuzzerTest(const uint8_t *data, size_t size)715 void DhcpResponseHandleFuzzerTest(const uint8_t *data, size_t size)
716 {
717 dhcpClient->DhcpResponseHandle(1);
718 }
719
SignalReceiverFuzzerTest(const uint8_t *data, size_t size)720 void SignalReceiverFuzzerTest(const uint8_t *data, size_t size)
721 {
722 dhcpClient->SignalReceiver();
723 }
724
SetIpv4StateFuzzerTest(const uint8_t *data, size_t size)725 void SetIpv4StateFuzzerTest(const uint8_t *data, size_t size)
726 {
727 int state = static_cast<int>(data[0]);
728 dhcpClient->SetIpv4State(state);
729 }
730
PublishDhcpResultEventFuzzerTest(const uint8_t *data, size_t size)731 void PublishDhcpResultEventFuzzerTest(const uint8_t *data, size_t size)
732 {
733 char ifname[3] = {0};
734 int code = static_cast<int>(data[0]);
735 struct DhcpIpResult result;
736 dhcpClient->PublishDhcpResultEvent(nullptr, code, &result);
737 dhcpClient->PublishDhcpResultEvent(ifname, code, nullptr);
738 dhcpClient->PublishDhcpResultEvent(ifname, code, &result);
739 }
740
GetPacketHeaderInfoFuzzerTest(const uint8_t *data, size_t size)741 void GetPacketHeaderInfoFuzzerTest(const uint8_t *data, size_t size)
742 {
743 struct DhcpPacket packet;
744 uint8_t type = static_cast<uint8_t>(data[0]);
745 dhcpClient->GetPacketHeaderInfo(&packet, type);
746 }
747
GetPacketCommonInfoFuzzerTest(const uint8_t *data, size_t size)748 void GetPacketCommonInfoFuzzerTest(const uint8_t *data, size_t size)
749 {
750 dhcpClient->GetPacketCommonInfo(nullptr);
751
752 struct DhcpPacket packet;
753 memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket));
754 packet.options[0] = END_OPTION;
755 dhcpClient->GetPacketCommonInfo(&packet);
756 }
757
AddClientIdToOptsFuzzerTest(const uint8_t *data, size_t size)758 void AddClientIdToOptsFuzzerTest(const uint8_t *data, size_t size)
759 {
760 dhcpClient->AddClientIdToOpts(nullptr);
761
762 struct DhcpPacket packet;
763 memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket));
764 packet.options[0] = END_OPTION;
765 dhcpClient->AddClientIdToOpts(&packet);
766 }
767
AddHostNameToOptsFuzzerTest(const uint8_t *data, size_t size)768 void AddHostNameToOptsFuzzerTest(const uint8_t *data, size_t size)
769 {
770 dhcpClient->AddHostNameToOpts(nullptr);
771
772 struct DhcpPacket packet;
773 memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket));
774 packet.options[0] = END_OPTION;
775 dhcpClient->AddHostNameToOpts(&packet);
776 }
777
AddStrToOptsFuzzerTest(const uint8_t *data, size_t size)778 void AddStrToOptsFuzzerTest(const uint8_t *data, size_t size)
779 {
780 struct DhcpPacket packet;
781 memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket));
782 packet.options[0] = END_OPTION;
783 int option = 2;
784 std::string value = "wlan1";
785 dhcpClient->AddStrToOpts(&packet, option, value);
786 }
787
DhcpDiscoverFuzzerTest(const uint8_t *data, size_t size)788 void DhcpDiscoverFuzzerTest(const uint8_t *data, size_t size)
789 {
790 uint32_t transid = static_cast<uint32_t>(data[0]);
791 uint32_t requestip = static_cast<uint32_t>(data[0]);
792 dhcpClient->DhcpDiscover(transid, requestip);
793 }
794
DhcpRequestFuzzerTest(const uint8_t *data, size_t size)795 void DhcpRequestFuzzerTest(const uint8_t *data, size_t size)
796 {
797 uint32_t transid = static_cast<uint32_t>(data[0]);
798 uint32_t reqip = static_cast<uint32_t>(data[0]);
799 uint32_t servip = static_cast<uint32_t>(data[0]);
800 dhcpClient->DhcpRequest(transid, reqip, servip);
801 }
802
DhcpRenewFuzzerTest(const uint8_t *data, size_t size)803 void DhcpRenewFuzzerTest(const uint8_t *data, size_t size)
804 {
805 uint32_t transId = static_cast<uint32_t>(data[0]);
806 uint32_t clientIp = static_cast<uint32_t>(data[0]);
807 uint32_t serverIp = static_cast<uint32_t>(data[0]);
808 dhcpClient->DhcpRenew(transId, clientIp, serverIp);
809 }
810
DhcpReleaseFuzzerTest(const uint8_t *data, size_t size)811 void DhcpReleaseFuzzerTest(const uint8_t *data, size_t size)
812 {
813 uint32_t clientIp = static_cast<uint32_t>(data[0]);
814 uint32_t serverIp = static_cast<uint32_t>(data[0]);
815 dhcpClient->DhcpRelease(clientIp, serverIp);
816 }
817
DhcpDeclineFuzzerTest(const uint8_t *data, size_t size)818 void DhcpDeclineFuzzerTest(const uint8_t *data, size_t size)
819 {
820 uint32_t transId = static_cast<uint32_t>(data[0]);
821 uint32_t clientIp = static_cast<uint32_t>(data[0]);
822 uint32_t serverIp = static_cast<uint32_t>(data[0]);
823 dhcpClient->DhcpDecline(transId, clientIp, serverIp);
824 }
825
IpConflictDetectFuzzerTest(const uint8_t *data, size_t size)826 void IpConflictDetectFuzzerTest(const uint8_t *data, size_t size)
827 {
828 dhcpClient->IpConflictDetect();
829 }
830
FastArpDetectFuzzerTest(const uint8_t *data, size_t size)831 void FastArpDetectFuzzerTest(const uint8_t *data, size_t size)
832 {
833 dhcpClient->FastArpDetect();
834 }
835
SlowArpDetectCallbackFuzzerTest(const uint8_t *data, size_t size)836 void SlowArpDetectCallbackFuzzerTest(const uint8_t *data, size_t size)
837 {
838 bool isReachable = true;
839 dhcpClient->SlowArpDetectCallback(isReachable);
840
841 isReachable = false;
842 dhcpClient->SlowArpDetectCallback(isReachable);
843 }
844
SlowArpDetectFuzzerTest(const uint8_t *data, size_t size)845 void SlowArpDetectFuzzerTest(const uint8_t *data, size_t size)
846 {
847 time_t timestamp = 1;
848 dhcpClient->m_sentPacketNum = THREE;
849 dhcpClient->SlowArpDetect(timestamp);
850
851 dhcpClient->m_sentPacketNum = TWO;
852 dhcpClient->SlowArpDetect(timestamp);
853
854 dhcpClient->m_sentPacketNum = 0;
855 dhcpClient->SlowArpDetect(timestamp);
856 }
857
IsArpReachableFuzzerTest(const uint8_t *data, size_t size)858 void IsArpReachableFuzzerTest(const uint8_t *data, size_t size)
859 {
860 uint32_t timeoutMillis = static_cast<uint32_t>(data[0]);
861 std::string ipAddress = std::string(reinterpret_cast<const char *>(data), size);
862 dhcpClient->IsArpReachable(timeoutMillis, ipAddress);
863 }
864
GetCachedDhcpResultFuzzerTest(const uint8_t *data, size_t size)865 void GetCachedDhcpResultFuzzerTest(const uint8_t *data, size_t size)
866 {
867 std::string targetBssid = std::string(reinterpret_cast<const char *>(data), size);
868 struct IpInfoCached ipcached;
869 dhcpClient->GetCachedDhcpResult(targetBssid, ipcached);
870 }
871
SaveIpInfoInLocalFileFuzzerTest(const uint8_t *data, size_t size)872 void SaveIpInfoInLocalFileFuzzerTest(const uint8_t *data, size_t size)
873 {
874 struct DhcpIpResult ipResult;
875 dhcpClient->SaveIpInfoInLocalFile(ipResult);
876 }
877
TryCachedIpFuzzerTest(const uint8_t *data, size_t size)878 void TryCachedIpFuzzerTest(const uint8_t *data, size_t size)
879 {
880 dhcpClient->TryCachedIp();
881 }
882
SetConfigurationFuzzerTest(const uint8_t *data, size_t size)883 void SetConfigurationFuzzerTest(const uint8_t *data, size_t size)
884 {
885 struct RouterCfg routerCfg;
886 dhcpClient->SetConfiguration(routerCfg);
887 }
888
GetIpTimerCallbackFuzzerTest(const uint8_t *data, size_t size)889 void GetIpTimerCallbackFuzzerTest(const uint8_t *data, size_t size)
890 {
891 dhcpClient->GetIpTimerCallback();
892
893 dhcpClient->m_action = ACTION_RENEW_T1;
894 dhcpClient->GetIpTimerCallback();
895
896 dhcpClient->m_action = ACTION_RENEW_T3;
897 dhcpClient->GetIpTimerCallback();
898
899 dhcpClient->m_action = ACTION_START_NEW;
900 dhcpClient->GetIpTimerCallback();
901 }
902
StartTimerFuzzerTest(const uint8_t *data, size_t size)903 void StartTimerFuzzerTest(const uint8_t *data, size_t size)
904 {
905 uint32_t timerId = static_cast<uint32_t>(data[0]);
906 TimerType type = TimerType::TIMER_REBIND_DELAY;
907 int64_t interval = static_cast<int64_t>(data[0]);
908 bool once = (static_cast<int>(data[0]) % TWO) ? true : false;
909 dhcpClient->StartTimer(type, timerId, interval, once);
910
911 type = TimerType::TIMER_REMAINING_DELAY;
912 dhcpClient->StartTimer(type, timerId, interval, once);
913
914 type = TimerType::TIMER_RENEW_DELAY;
915 dhcpClient->StartTimer(type, timerId, interval, once);
916 }
917
StopTimerFuzzerTest(const uint8_t *data, size_t size)918 void StopTimerFuzzerTest(const uint8_t *data, size_t size)
919 {
920 uint32_t timerId = static_cast<uint32_t>(data[0]);
921 dhcpClient->StopTimer(timerId);
922 }
923
RenewDelayCallbackFuzzerTest(const uint8_t *data, size_t size)924 void RenewDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
925 {
926 dhcpClient->RenewDelayCallback();
927 }
928
RebindDelayCallbackFuzzerTest(const uint8_t *data, size_t size)929 void RebindDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
930 {
931 dhcpClient->RebindDelayCallback();
932 }
933
RemainingDelayCallbackFuzzerTest(const uint8_t *data, size_t size)934 void RemainingDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
935 {
936 dhcpClient->RemainingDelayCallback();
937 }
938
SendStopSignalFuzzerTest(const uint8_t *data, size_t size)939 void SendStopSignalFuzzerTest(const uint8_t *data, size_t size)
940 {
941 dhcpClient->SendStopSignal();
942 }
943
CloseAllRenewTimerFuzzerTest(const uint8_t *data, size_t size)944 void CloseAllRenewTimerFuzzerTest(const uint8_t *data, size_t size)
945 {
946 dhcpClient->CloseAllRenewTimer();
947 }
948
DhcpIpv6ClientFuzzerTest(const uint8_t *data, size_t size)949 void DhcpIpv6ClientFuzzerTest(const uint8_t *data, size_t size)
950 {
951 IsRunningFuzzerTest(data, size);
952 SetCallbackFuzzerTest(data, size);
953 StartIpv6ThreadFuzzerTest(data, size);
954 Ipv6AddrScope2TypeFuzzerTest(data, size);
955 GetAddrTypeFuzzerTest(data, size);
956 GetAddrScopeFuzzerTest(data, size);
957 GetIpv6PrefixFuzzerTest(data, size);
958 GetIpFromS6AddressFuzzerTest(data, size);
959 OnIpv6AddressAddEventFuzzerTest(data, size);
960 AddIpv6AddressFuzzerTest(data, size);
961 OnIpv6DnsAddEventFuzzerTest(data, size);
962 OnIpv6RouteAddEventFuzzerTest(data, size);
963 CreateKernelSocketFuzzerTest(data, size);
964 ResetFuzzerTest(data, size);
965 GetIpv6RouteAddrFuzzerTest(data, size);
966 DhcpIPV6StopFuzzerTest(data, size);
967 Ipv6TimerCallbackFuzzerTest(data, size);
968 StartIpv6TimerFuzzerTest(data, size);
969 StopIpv6TimerFuzzerTest(data, size);
970 }
971
DhcpIpv6EventFuzzerTest(const uint8_t *data, size_t size)972 void DhcpIpv6EventFuzzerTest(const uint8_t *data, size_t size)
973 {
974 SetSocketFilterFuzzerTest(data, size);
975 ParseNdUserOptMessageFuzzerTest(data, size);
976 ParseNDRouteMessageFuzzerTest(data, size);
977 ParseNewneighMessageFuzzerTest(data, size);
978 FillRouteDataFuzzerTest(data, size);
979 HandleKernelEventFuzzerTest(data, size);
980 }
981
DhcpSocketFuzzerTest(const uint8_t *data, size_t size)982 void DhcpSocketFuzzerTest(const uint8_t *data, size_t size)
983 {
984 CreateKernelSocketFuzzerTest1(data, size);
985 BindRawSocketFuzzerTest(data, size);
986 BindKernelSocketFuzzerTest(data, size);
987 SendDhcpPacketFuzzerTest(data, size);
988 CheckReadBytesFuzzerTest(data, size);
989 CheckUdpPacketFuzzerTest(data, size);
990 CheckPacketIpSumFuzzerTest(data, size);
991 CheckPacketUdpSumFuzzerTest(data, size);
992 GetDhcpRawPacketFuzzerTest(data, size);
993 }
994
DhcpClientStateMachineFuzzerTest(const uint8_t *data, size_t size)995 void DhcpClientStateMachineFuzzerTest(const uint8_t *data, size_t size)
996 {
997 CloseSignalHandleFuzzerTest(data, size);
998 RunGetIPThreadFuncFuzzerTest(data, size);
999 InitConfigFuzzerTest(data, size);
1000 InitSpecifiedClientCfgFuzzerTest(data, size);
1001 GetClientNetworkInfoFuzzerTest(data, size);
1002 ExitIpv4FuzzerTest(data, size);
1003 StopIpv4FuzzerTest(data, size);
1004 GetActionFuzzerTest(data, size);
1005 DhcpInitFuzzerTest(data, size);
1006 DhcpStopFuzzerTest(data, size);
1007 InitSocketFdFuzzerTest(data, size);
1008 GetPacketReadSockFdFuzzerTest(data, size);
1009 GetSigReadSockFdFuzzerTest(data, size);
1010 GetDhcpTransIDFuzzerTest(data, size);
1011 SetSocketModeFuzzerTest(data, size);
1012 ExecDhcpRenewFuzzerTest(data, size);
1013 ExecDhcpReleaseFuzzerTest(data, size);
1014 GetRandomIdFuzzerTest(data, size);
1015 InitSelectingFuzzerTest(data, size);
1016 DhcpRebootFuzzerTest(data, size);
1017 SendRebootFuzzerTest(data, size);
1018 RebootFuzzerTest(data, size);
1019 RequestingFuzzerTest(data, size);
1020 RenewingFuzzerTest(data, size);
1021 RebindingFuzzerTest(data, size);
1022 DecliningFuzzerTest(data, size);
1023 DhcpRequestHandleFuzzerTest(data, size);
1024 DhcpOfferPacketHandleFuzzerTest(data, size);
1025 ParseNetworkServerIdInfoFuzzerTest(data, size);
1026 ParseNetworkDnsInfoFuzzerTest(data, size);
1027 ParseNetworkDnsValueFuzzerTest(data, size);
1028 ParseNetworkInfoFuzzerTest(data, size);
1029 FormatStringFuzzerTest(data, size);
1030 GetDHCPServerHostNameFuzzerTest(data, size);
1031 ParseNetworkVendorInfoFuzzerTest(data, size);
1032 DhcpAckOrNakPacketHandleFuzzerTest(data, size);
1033 ParseDhcpAckPacketFuzzerTest(data, size);
1034 ParseDhcpNakPacketFuzzerTest(data, size);
1035 GetDhcpOfferFuzzerTest(data, size);
1036 DhcpResponseHandleFuzzerTest(data, size);
1037 SignalReceiverFuzzerTest(data, size);
1038 SetIpv4StateFuzzerTest(data, size);
1039 PublishDhcpResultEventFuzzerTest(data, size);
1040 }
1041
DhcpClientStateMachineExFuzzerTest(const uint8_t *data, size_t size)1042 void DhcpClientStateMachineExFuzzerTest(const uint8_t *data, size_t size)
1043 {
1044 GetPacketHeaderInfoFuzzerTest(data, size);
1045 GetPacketCommonInfoFuzzerTest(data, size);
1046 AddClientIdToOptsFuzzerTest(data, size);
1047 AddHostNameToOptsFuzzerTest(data, size);
1048 AddStrToOptsFuzzerTest(data, size);
1049 DhcpDiscoverFuzzerTest(data, size);
1050 DhcpRequestFuzzerTest(data, size);
1051 DhcpRenewFuzzerTest(data, size);
1052 DhcpReleaseFuzzerTest(data, size);
1053 DhcpDeclineFuzzerTest(data, size);
1054 IpConflictDetectFuzzerTest(data, size);
1055 FastArpDetectFuzzerTest(data, size);
1056 SlowArpDetectCallbackFuzzerTest(data, size);
1057 SlowArpDetectFuzzerTest(data, size);
1058 IsArpReachableFuzzerTest(data, size);
1059 GetCachedDhcpResultFuzzerTest(data, size);
1060 SaveIpInfoInLocalFileFuzzerTest(data, size);
1061 TryCachedIpFuzzerTest(data, size);
1062 SetConfigurationFuzzerTest(data, size);
1063 GetIpTimerCallbackFuzzerTest(data, size);
1064 StartTimerFuzzerTest(data, size);
1065 StopTimerFuzzerTest(data, size);
1066 RenewDelayCallbackFuzzerTest(data, size);
1067 RebindDelayCallbackFuzzerTest(data, size);
1068 RemainingDelayCallbackFuzzerTest(data, size);
1069 SendStopSignalFuzzerTest(data, size);
1070 CloseAllRenewTimerFuzzerTest(data, size);
1071 }
1072
1073 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)1074 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
1075 {
1076 if ((data == nullptr) || (size <= OHOS::DHCP::U32_AT_SIZE_ZERO)) {
1077 return 0;
1078 }
1079 DhcpClientStateMachineFunFuzzerTest(data, size);
1080 DhcpIpv6FunFuzzerTest(data, size);
1081 DhcpIpv6ClientFuzzerTest(data, size);
1082 DhcpIpv6EventFuzzerTest(data, size);
1083 DhcpSocketFuzzerTest(data, size);
1084 DhcpClientStateMachineFuzzerTest(data, size);
1085 DhcpClientStateMachineExFuzzerTest(data, size);
1086 return 0;
1087 }
1088 } // namespace DHCP
1089 } // namespace OHOS