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