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 int sockFd = 0;
49 dhcpClient->DhcpResponseHandle(curTimestamp, sockFd);
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 ipv6Client->GetIpFromS6Address(nullptr, family, nullptr, buflen);
147
148 struct in6_addr addr;
149 char buf[INET6_ADDRSTRLEN] = {0};
150 ipv6Client->GetIpFromS6Address(&addr, family, buf, buflen);
151 }
152
OnIpv6AddressAddEventFuzzerTest(const uint8_t * data,size_t size)153 void OnIpv6AddressAddEventFuzzerTest(const uint8_t *data, size_t size)
154 {
155 int prefixLen = static_cast<int>(data[0]);
156 int ifaIndex = static_cast<int>(data[0]);
157 ipv6Client->onIpv6AddressAddEvent(nullptr, prefixLen, ifaIndex);
158
159 struct in6_addr data1;
160 ipv6Client->onIpv6AddressAddEvent(&data1, prefixLen, ifaIndex);
161 }
162
AddIpv6AddressFuzzerTest(const uint8_t * data,size_t size)163 void AddIpv6AddressFuzzerTest(const uint8_t *data, size_t size)
164 {
165 int len = static_cast<int>(data[0]);
166 ipv6Client->AddIpv6Address(nullptr, len);
167 }
168
OnIpv6DnsAddEventFuzzerTest(const uint8_t * data,size_t size)169 void OnIpv6DnsAddEventFuzzerTest(const uint8_t *data, size_t size)
170 {
171 int len = static_cast<int>(data[0]);
172 int ifaIndex = static_cast<int>(data[0]);
173 ipv6Client->onIpv6DnsAddEvent(nullptr, len, ifaIndex);
174
175 struct nd_opt_hdr data1;
176 ipv6Client->onIpv6DnsAddEvent(&data1, len, ifaIndex);
177 }
178
OnIpv6RouteAddEventFuzzerTest(const uint8_t * data,size_t size)179 void OnIpv6RouteAddEventFuzzerTest(const uint8_t *data, size_t size)
180 {
181 char *gateway = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
182 char *dst = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
183 int ifaIndex = static_cast<int>(data[0]);
184 ipv6Client->onIpv6RouteAddEvent(gateway, dst, ifaIndex);
185 }
186
CreateKernelSocketFuzzerTest(const uint8_t * data,size_t size)187 void CreateKernelSocketFuzzerTest(const uint8_t *data, size_t size)
188 {
189 ipv6Client->createKernelSocket();
190 }
191
ResetFuzzerTest(const uint8_t * data,size_t size)192 void ResetFuzzerTest(const uint8_t *data, size_t size)
193 {
194 ipv6Client->Reset();
195 }
196
GetIpv6RouteAddrFuzzerTest(const uint8_t * data,size_t size)197 void GetIpv6RouteAddrFuzzerTest(const uint8_t *data, size_t size)
198 {
199 ipv6Client->getIpv6RouteAddr();
200 }
201
DhcpIPV6StopFuzzerTest(const uint8_t * data,size_t size)202 void DhcpIPV6StopFuzzerTest(const uint8_t *data, size_t size)
203 {
204 ipv6Client->DhcpIPV6Stop();
205 }
206
Ipv6TimerCallbackFuzzerTest(const uint8_t * data,size_t size)207 void Ipv6TimerCallbackFuzzerTest(const uint8_t *data, size_t size)
208 {
209 ipv6Client->Ipv6TimerCallback();
210 }
211
StartIpv6TimerFuzzerTest(const uint8_t * data,size_t size)212 void StartIpv6TimerFuzzerTest(const uint8_t *data, size_t size)
213 {
214 ipv6Client->StartIpv6Timer();
215 }
216
StopIpv6TimerFuzzerTest(const uint8_t * data,size_t size)217 void StopIpv6TimerFuzzerTest(const uint8_t *data, size_t size)
218 {
219 ipv6Client->StopIpv6Timer();
220 }
221
222 /* Dhcp Ipv6 Event */
SetSocketFilterFuzzerTest(const uint8_t * data,size_t size)223 void SetSocketFilterFuzzerTest(const uint8_t *data, size_t size)
224 {
225 ipv6Client->setSocketFilter(nullptr);
226
227 struct sockaddr_nl addr;
228 ipv6Client->setSocketFilter(&addr);
229 }
230
ParseNdUserOptMessageFuzzerTest(const uint8_t * data,size_t size)231 void ParseNdUserOptMessageFuzzerTest(const uint8_t *data, size_t size)
232 {
233 int len = static_cast<int>(data[0]);
234 ipv6Client->parseNdUserOptMessage(nullptr, len);
235
236 struct nduseroptmsg data1;
237 ipv6Client->parseNdUserOptMessage(&data1, len);
238 }
239
ParseNDRouteMessageFuzzerTest(const uint8_t * data,size_t size)240 void ParseNDRouteMessageFuzzerTest(const uint8_t *data, size_t size)
241 {
242 ipv6Client->parseNDRouteMessage(nullptr);
243
244 struct nlmsghdr msg;
245 ipv6Client->parseNDRouteMessage(&msg);
246 }
247
ParseNewneighMessageFuzzerTest(const uint8_t * data,size_t size)248 void ParseNewneighMessageFuzzerTest(const uint8_t *data, size_t size)
249 {
250 ipv6Client->parseNewneighMessage(nullptr);
251
252 struct nlmsghdr msg;
253 ipv6Client->parseNewneighMessage(&msg);
254 }
255
FillRouteDataFuzzerTest(const uint8_t * data,size_t size)256 void FillRouteDataFuzzerTest(const uint8_t *data, size_t size)
257 {
258 int len = static_cast<int>(data[0]);
259 ipv6Client->fillRouteData(nullptr, len);
260 const int nlmsgHdrsize = 16;
261 char buff[nlmsgHdrsize];
262 ipv6Client->fillRouteData(buff, len);
263 }
264
HandleKernelEventFuzzerTest(const uint8_t * data,size_t size)265 void HandleKernelEventFuzzerTest(const uint8_t *data, size_t size)
266 {
267 int len = static_cast<int>(data[0]);
268 ipv6Client->handleKernelEvent(nullptr, len);
269 ipv6Client->handleKernelEvent(data, len);
270 }
271
272 /* Dhcp Socket */
CreateKernelSocketFuzzerTest1(const uint8_t * data,size_t size)273 void CreateKernelSocketFuzzerTest1(const uint8_t *data, size_t size)
274 {
275 int sockFd = static_cast<int>(data[0]);
276 CreateKernelSocket(&sockFd);
277 }
278
BindRawSocketFuzzerTest(const uint8_t * data,size_t size)279 void BindRawSocketFuzzerTest(const uint8_t *data, size_t size)
280 {
281 int rawFd = static_cast<int>(data[0]);
282 int ifaceIndex = static_cast<int>(data[0]);
283 BindRawSocket(rawFd, ifaceIndex, data);
284 }
285
BindKernelSocketFuzzerTest(const uint8_t * data,size_t size)286 void BindKernelSocketFuzzerTest(const uint8_t *data, size_t size)
287 {
288 int sockFd = static_cast<int>(data[0]);
289 char *ifaceName = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
290 uint32_t sockIp = static_cast<uint32_t>(data[0]);
291 int sockPort = static_cast<int>(data[0]);
292 bool bCast = true;
293 BindKernelSocket(sockFd, ifaceName, sockIp, sockPort, bCast);
294 }
295
SendDhcpPacketFuzzerTest(const uint8_t * data,size_t size)296 void SendDhcpPacketFuzzerTest(const uint8_t *data, size_t size)
297 {
298 struct DhcpPacket *sendPacket = nullptr;
299 uint32_t srcIp = static_cast<uint32_t>(data[0]);
300 uint32_t destIp = static_cast<uint32_t>(data[0]);
301 SendDhcpPacket(sendPacket, srcIp, destIp);
302 }
303
CheckReadBytesFuzzerTest(const uint8_t * data,size_t size)304 void CheckReadBytesFuzzerTest(const uint8_t *data, size_t size)
305 {
306 int count = static_cast<int>(data[0]);
307 int totLen = static_cast<int>(data[0]);
308 CheckReadBytes(count, totLen);
309 }
310
CheckUdpPacketFuzzerTest(const uint8_t * data,size_t size)311 void CheckUdpPacketFuzzerTest(const uint8_t *data, size_t size)
312 {
313 int totLen = static_cast<int>(data[0]);
314 CheckUdpPacket(nullptr, totLen);
315
316 struct UdpDhcpPacket pPacket;
317 CheckUdpPacket(&pPacket, totLen);
318
319 pPacket.ip.protocol = 0;
320 pPacket.ip.version = 0;
321 CheckUdpPacket(&pPacket, totLen);
322
323 pPacket.ip.ihl = 0;
324 CheckUdpPacket(&pPacket, totLen);
325
326 pPacket.udp.dest = 0;
327 CheckUdpPacket(&pPacket, totLen);
328
329 pPacket.udp.len = 0;
330 CheckUdpPacket(&pPacket, totLen);
331 }
332
CheckPacketIpSumFuzzerTest(const uint8_t * data,size_t size)333 void CheckPacketIpSumFuzzerTest(const uint8_t *data, size_t size)
334 {
335 int bytes = static_cast<int>(data[0]);
336 CheckPacketIpSum(nullptr, bytes);
337
338 struct UdpDhcpPacket pPacket;
339 pPacket.ip.check = static_cast<uint16_t>(data[0]);
340 CheckPacketIpSum(&pPacket, bytes);
341 }
342
CheckPacketUdpSumFuzzerTest(const uint8_t * data,size_t size)343 void CheckPacketUdpSumFuzzerTest(const uint8_t *data, size_t size)
344 {
345 int bytes = static_cast<int>(data[0]);
346 CheckPacketUdpSum(nullptr, bytes);
347
348 struct UdpDhcpPacket pPacket;
349 pPacket.udp.check = static_cast<uint16_t>(data[0]);
350 pPacket.udp.len = static_cast<uint16_t>(data[0]);
351 pPacket.ip.saddr = static_cast<uint32_t>(data[0]);
352 pPacket.ip.daddr = static_cast<uint32_t>(data[0]);
353 CheckPacketUdpSum(&pPacket, bytes);
354 }
355
GetDhcpRawPacketFuzzerTest(const uint8_t * data,size_t size)356 void GetDhcpRawPacketFuzzerTest(const uint8_t *data, size_t size)
357 {
358 int rawFd = static_cast<int>(data[0]);
359 GetDhcpRawPacket(nullptr, rawFd);
360
361 struct DhcpPacket getPacket;
362 getPacket.cookie = static_cast<int32_t>(data[0]);
363 GetDhcpRawPacket(&getPacket, rawFd);
364 }
365
366 /* Dhcp Client State Machine */
CloseSignalHandleFuzzerTest(const uint8_t * data,size_t size)367 void CloseSignalHandleFuzzerTest(const uint8_t *data, size_t size)
368 {
369 dhcpClient->m_sigSockFds[0] = 0;
370 dhcpClient->m_sigSockFds[1] = 1;
371 dhcpClient->CloseSignalHandle();
372 }
373
RunGetIPThreadFuncFuzzerTest(const uint8_t * data,size_t size)374 void RunGetIPThreadFuncFuzzerTest(const uint8_t *data, size_t size)
375 {
376 dhcpClient->m_cltCnf.getMode = 0;
377 DhcpClientStateMachine machine("wlan0");
378 dhcpClient->RunGetIPThreadFunc(machine);
379 }
380
InitConfigFuzzerTest(const uint8_t * data,size_t size)381 void InitConfigFuzzerTest(const uint8_t *data, size_t size)
382 {
383 std::string ifname = std::string(reinterpret_cast<const char *>(data), size);
384 bool isIpv6 = (static_cast<int>(data[0]) % TWO) ? true : false;
385 dhcpClient->InitConfig(ifname, isIpv6);
386 }
387
InitSpecifiedClientCfgFuzzerTest(const uint8_t * data,size_t size)388 void InitSpecifiedClientCfgFuzzerTest(const uint8_t *data, size_t size)
389 {
390 std::string ifname = std::string(reinterpret_cast<const char *>(data), size);
391 bool isIpv6 = (static_cast<int>(data[0]) % TWO) ? true : false;
392 dhcpClient->InitSpecifiedClientCfg(ifname, isIpv6);
393 }
394
GetClientNetworkInfoFuzzerTest(const uint8_t * data,size_t size)395 void GetClientNetworkInfoFuzzerTest(const uint8_t *data, size_t size)
396 {
397 dhcpClient->GetClientNetworkInfo();
398 }
399
ExitIpv4FuzzerTest(const uint8_t * data,size_t size)400 void ExitIpv4FuzzerTest(const uint8_t *data, size_t size)
401 {
402 dhcpClient->ExitIpv4();
403 }
404
StopIpv4FuzzerTest(const uint8_t * data,size_t size)405 void StopIpv4FuzzerTest(const uint8_t *data, size_t size)
406 {
407 dhcpClient->getIpTimerId = static_cast<uint32_t>(data[0]);
408 dhcpClient->m_slowArpTaskId = 1;
409 dhcpClient->StopIpv4();
410 }
411
GetActionFuzzerTest(const uint8_t * data,size_t size)412 void GetActionFuzzerTest(const uint8_t *data, size_t size)
413 {
414 dhcpClient->m_action = ActionMode::ACTION_START_NEW;
415 dhcpClient->GetAction();
416 }
417
DhcpInitFuzzerTest(const uint8_t * data,size_t size)418 void DhcpInitFuzzerTest(const uint8_t *data, size_t size)
419 {
420 dhcpClient->DhcpInit();
421 }
422
InitSocketFdFuzzerTest(const uint8_t * data,size_t size)423 void InitSocketFdFuzzerTest(const uint8_t *data, size_t size)
424 {
425 int sockFdRaw = 0;
426 int sockFdkernel = 0;
427 dhcpClient->InitSocketFd(sockFdRaw, sockFdkernel);
428
429 dhcpClient->m_sockFd = 1;
430 dhcpClient->m_socketMode = SOCKET_MODE_RAW;
431 dhcpClient->InitSocketFd(sockFdRaw, sockFdkernel);
432
433 dhcpClient->m_socketMode = SOCKET_MODE_KERNEL;
434 dhcpClient->InitSocketFd(sockFdRaw, sockFdkernel);
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 int sockFd = 0;
718 dhcpClient->DhcpResponseHandle(1, sockFd);
719 }
720
SignalReceiverFuzzerTest(const uint8_t * data,size_t size)721 void SignalReceiverFuzzerTest(const uint8_t *data, size_t size)
722 {
723 dhcpClient->SignalReceiver();
724 }
725
SetIpv4StateFuzzerTest(const uint8_t * data,size_t size)726 void SetIpv4StateFuzzerTest(const uint8_t *data, size_t size)
727 {
728 int state = static_cast<int>(data[0]);
729 dhcpClient->SetIpv4State(state);
730 }
731
PublishDhcpResultEventFuzzerTest(const uint8_t * data,size_t size)732 void PublishDhcpResultEventFuzzerTest(const uint8_t *data, size_t size)
733 {
734 char *ifname = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
735 int code = static_cast<int>(data[0]);
736 struct DhcpIpResult result;
737 dhcpClient->PublishDhcpResultEvent(nullptr, code, &result);
738 dhcpClient->PublishDhcpResultEvent(ifname, code, nullptr);
739 dhcpClient->PublishDhcpResultEvent(ifname, code, &result);
740 }
741
GetPacketHeaderInfoFuzzerTest(const uint8_t * data,size_t size)742 void GetPacketHeaderInfoFuzzerTest(const uint8_t *data, size_t size)
743 {
744 struct DhcpPacket packet;
745 uint8_t type = static_cast<uint8_t>(data[0]);
746 dhcpClient->GetPacketHeaderInfo(&packet, type);
747 }
748
GetPacketCommonInfoFuzzerTest(const uint8_t * data,size_t size)749 void GetPacketCommonInfoFuzzerTest(const uint8_t *data, size_t size)
750 {
751 dhcpClient->GetPacketCommonInfo(nullptr);
752
753 struct DhcpPacket packet;
754 dhcpClient->GetPacketCommonInfo(&packet);
755 }
756
AddClientIdToOptsFuzzerTest(const uint8_t * data,size_t size)757 void AddClientIdToOptsFuzzerTest(const uint8_t *data, size_t size)
758 {
759 dhcpClient->AddClientIdToOpts(nullptr);
760
761 struct DhcpPacket packet;
762 dhcpClient->AddClientIdToOpts(&packet);
763 }
764
AddHostNameToOptsFuzzerTest(const uint8_t * data,size_t size)765 void AddHostNameToOptsFuzzerTest(const uint8_t *data, size_t size)
766 {
767 dhcpClient->AddHostNameToOpts(nullptr);
768
769 struct DhcpPacket packet;
770 dhcpClient->AddHostNameToOpts(&packet);
771 }
772
AddStrToOptsFuzzerTest(const uint8_t * data,size_t size)773 void AddStrToOptsFuzzerTest(const uint8_t *data, size_t size)
774 {
775 struct DhcpPacket packet;
776 int option = static_cast<int>(data[0]);
777 std::string value = "wlan1";
778 dhcpClient->AddStrToOpts(&packet, option, value);
779 }
780
781
DhcpDiscoverFuzzerTest(const uint8_t * data,size_t size)782 void DhcpDiscoverFuzzerTest(const uint8_t *data, size_t size)
783 {
784 uint32_t transid = static_cast<uint32_t>(data[0]);
785 uint32_t requestip = static_cast<uint32_t>(data[0]);
786 dhcpClient->DhcpDiscover(transid, requestip);
787 }
788
DhcpRequestFuzzerTest(const uint8_t * data,size_t size)789 void DhcpRequestFuzzerTest(const uint8_t *data, size_t size)
790 {
791 uint32_t transid = static_cast<uint32_t>(data[0]);
792 uint32_t reqip = static_cast<uint32_t>(data[0]);
793 uint32_t servip = static_cast<uint32_t>(data[0]);
794 dhcpClient->DhcpRequest(transid, reqip, servip);
795 }
796
DhcpRenewFuzzerTest(const uint8_t * data,size_t size)797 void DhcpRenewFuzzerTest(const uint8_t *data, size_t size)
798 {
799 uint32_t transId = static_cast<uint32_t>(data[0]);
800 uint32_t clientIp = static_cast<uint32_t>(data[0]);
801 uint32_t serverIp = static_cast<uint32_t>(data[0]);
802 dhcpClient->DhcpRenew(transId, clientIp, serverIp);
803 }
804
DhcpReleaseFuzzerTest(const uint8_t * data,size_t size)805 void DhcpReleaseFuzzerTest(const uint8_t *data, size_t size)
806 {
807 uint32_t clientIp = static_cast<uint32_t>(data[0]);
808 uint32_t serverIp = static_cast<uint32_t>(data[0]);
809 dhcpClient->DhcpRelease(clientIp, serverIp);
810 }
811
DhcpDeclineFuzzerTest(const uint8_t * data,size_t size)812 void DhcpDeclineFuzzerTest(const uint8_t *data, size_t size)
813 {
814 uint32_t transId = static_cast<uint32_t>(data[0]);
815 uint32_t clientIp = static_cast<uint32_t>(data[0]);
816 uint32_t serverIp = static_cast<uint32_t>(data[0]);
817 dhcpClient->DhcpDecline(transId, clientIp, serverIp);
818 }
819
IpConflictDetectFuzzerTest(const uint8_t * data,size_t size)820 void IpConflictDetectFuzzerTest(const uint8_t *data, size_t size)
821 {
822 dhcpClient->IpConflictDetect();
823 }
824
FastArpDetectFuzzerTest(const uint8_t * data,size_t size)825 void FastArpDetectFuzzerTest(const uint8_t *data, size_t size)
826 {
827 dhcpClient->FastArpDetect();
828 }
829
SlowArpDetectCallbackFuzzerTest(const uint8_t * data,size_t size)830 void SlowArpDetectCallbackFuzzerTest(const uint8_t *data, size_t size)
831 {
832 bool isReachable = true;
833 dhcpClient->SlowArpDetectCallback(isReachable);
834
835 isReachable = false;
836 dhcpClient->SlowArpDetectCallback(isReachable);
837 }
838
SlowArpDetectFuzzerTest(const uint8_t * data,size_t size)839 void SlowArpDetectFuzzerTest(const uint8_t *data, size_t size)
840 {
841 time_t timestamp = 1;
842 dhcpClient->m_sentPacketNum = THREE;
843 dhcpClient->SlowArpDetect(timestamp);
844
845 dhcpClient->m_sentPacketNum = TWO;
846 dhcpClient->SlowArpDetect(timestamp);
847
848 dhcpClient->m_sentPacketNum = 0;
849 dhcpClient->SlowArpDetect(timestamp);
850 }
851
IsArpReachableFuzzerTest(const uint8_t * data,size_t size)852 void IsArpReachableFuzzerTest(const uint8_t *data, size_t size)
853 {
854 uint32_t timeoutMillis = static_cast<uint32_t>(data[0]);
855 std::string ipAddress = std::string(reinterpret_cast<const char *>(data), size);
856 dhcpClient->IsArpReachable(timeoutMillis, ipAddress);
857 }
858
GetCachedDhcpResultFuzzerTest(const uint8_t * data,size_t size)859 void GetCachedDhcpResultFuzzerTest(const uint8_t *data, size_t size)
860 {
861 std::string targetBssid = std::string(reinterpret_cast<const char *>(data), size);
862 struct IpInfoCached ipcached;
863 dhcpClient->GetCachedDhcpResult(targetBssid, ipcached);
864 }
865
SaveIpInfoInLocalFileFuzzerTest(const uint8_t * data,size_t size)866 void SaveIpInfoInLocalFileFuzzerTest(const uint8_t *data, size_t size)
867 {
868 struct DhcpIpResult ipResult;
869 dhcpClient->SaveIpInfoInLocalFile(ipResult);
870 }
871
TryCachedIpFuzzerTest(const uint8_t * data,size_t size)872 void TryCachedIpFuzzerTest(const uint8_t *data, size_t size)
873 {
874 dhcpClient->TryCachedIp();
875 }
876
SetConfigurationFuzzerTest(const uint8_t * data,size_t size)877 void SetConfigurationFuzzerTest(const uint8_t *data, size_t size)
878 {
879 struct RouterCfg routerCfg;
880 dhcpClient->SetConfiguration(routerCfg);
881 }
882
GetIpTimerCallbackFuzzerTest(const uint8_t * data,size_t size)883 void GetIpTimerCallbackFuzzerTest(const uint8_t *data, size_t size)
884 {
885 dhcpClient->GetIpTimerCallback();
886
887 dhcpClient->m_action = ACTION_RENEW_T1;
888 dhcpClient->GetIpTimerCallback();
889
890 dhcpClient->m_action = ACTION_RENEW_T3;
891 dhcpClient->GetIpTimerCallback();
892
893 dhcpClient->m_action = ACTION_START_NEW;
894 dhcpClient->GetIpTimerCallback();
895 }
896
StartTimerFuzzerTest(const uint8_t * data,size_t size)897 void StartTimerFuzzerTest(const uint8_t *data, size_t size)
898 {
899 uint32_t timerId = static_cast<uint32_t>(data[0]);
900 TimerType type = TimerType::TIMER_REBIND_DELAY;
901 int64_t interval = static_cast<int64_t>(data[0]);
902 bool once = (static_cast<int>(data[0]) % TWO) ? true : false;
903 dhcpClient->StartTimer(type, timerId, interval, once);
904
905 type = TimerType::TIMER_REMAINING_DELAY;
906 dhcpClient->StartTimer(type, timerId, interval, once);
907
908 type = TimerType::TIMER_RENEW_DELAY;
909 dhcpClient->StartTimer(type, timerId, interval, once);
910 }
911
StopTimerFuzzerTest(const uint8_t * data,size_t size)912 void StopTimerFuzzerTest(const uint8_t *data, size_t size)
913 {
914 uint32_t timerId = static_cast<uint32_t>(data[0]);
915 dhcpClient->StopTimer(timerId);
916 }
917
RenewDelayCallbackFuzzerTest(const uint8_t * data,size_t size)918 void RenewDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
919 {
920 dhcpClient->RenewDelayCallback();
921 }
922
RebindDelayCallbackFuzzerTest(const uint8_t * data,size_t size)923 void RebindDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
924 {
925 dhcpClient->RebindDelayCallback();
926 }
927
RemainingDelayCallbackFuzzerTest(const uint8_t * data,size_t size)928 void RemainingDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
929 {
930 dhcpClient->RemainingDelayCallback();
931 }
932
SendStopSignalFuzzerTest(const uint8_t * data,size_t size)933 void SendStopSignalFuzzerTest(const uint8_t *data, size_t size)
934 {
935 dhcpClient->SendStopSignal();
936 }
937
CloseAllRenewTimerFuzzerTest(const uint8_t * data,size_t size)938 void CloseAllRenewTimerFuzzerTest(const uint8_t *data, size_t size)
939 {
940 dhcpClient->CloseAllRenewTimer();
941 }
942
DhcpIpv6ClientFuzzerTest(const uint8_t * data,size_t size)943 void DhcpIpv6ClientFuzzerTest(const uint8_t *data, size_t size)
944 {
945 IsRunningFuzzerTest(data, size);
946 SetCallbackFuzzerTest(data, size);
947 StartIpv6ThreadFuzzerTest(data, size);
948 Ipv6AddrScope2TypeFuzzerTest(data, size);
949 GetAddrTypeFuzzerTest(data, size);
950 GetAddrScopeFuzzerTest(data, size);
951 GetIpv6PrefixFuzzerTest(data, size);
952 GetIpFromS6AddressFuzzerTest(data, size);
953 OnIpv6AddressAddEventFuzzerTest(data, size);
954 AddIpv6AddressFuzzerTest(data, size);
955 OnIpv6DnsAddEventFuzzerTest(data, size);
956 OnIpv6RouteAddEventFuzzerTest(data, size);
957 CreateKernelSocketFuzzerTest(data, size);
958 ResetFuzzerTest(data, size);
959 GetIpv6RouteAddrFuzzerTest(data, size);
960 DhcpIPV6StopFuzzerTest(data, size);
961 Ipv6TimerCallbackFuzzerTest(data, size);
962 StartIpv6TimerFuzzerTest(data, size);
963 StopIpv6TimerFuzzerTest(data, size);
964 }
965
DhcpIpv6EventFuzzerTest(const uint8_t * data,size_t size)966 void DhcpIpv6EventFuzzerTest(const uint8_t *data, size_t size)
967 {
968 SetSocketFilterFuzzerTest(data, size);
969 ParseNdUserOptMessageFuzzerTest(data, size);
970 ParseNDRouteMessageFuzzerTest(data, size);
971 ParseNewneighMessageFuzzerTest(data, size);
972 FillRouteDataFuzzerTest(data, size);
973 HandleKernelEventFuzzerTest(data, size);
974 }
975
DhcpSocketFuzzerTest(const uint8_t * data,size_t size)976 void DhcpSocketFuzzerTest(const uint8_t *data, size_t size)
977 {
978 CreateKernelSocketFuzzerTest1(data, size);
979 BindRawSocketFuzzerTest(data, size);
980 BindKernelSocketFuzzerTest(data, size);
981 SendDhcpPacketFuzzerTest(data, size);
982 CheckReadBytesFuzzerTest(data, size);
983 CheckUdpPacketFuzzerTest(data, size);
984 CheckPacketIpSumFuzzerTest(data, size);
985 CheckPacketUdpSumFuzzerTest(data, size);
986 GetDhcpRawPacketFuzzerTest(data, size);
987 }
988
DhcpClientStateMachineFuzzerTest(const uint8_t * data,size_t size)989 void DhcpClientStateMachineFuzzerTest(const uint8_t *data, size_t size)
990 {
991 CloseSignalHandleFuzzerTest(data, size);
992 RunGetIPThreadFuncFuzzerTest(data, size);
993 InitConfigFuzzerTest(data, size);
994 InitSpecifiedClientCfgFuzzerTest(data, size);
995 GetClientNetworkInfoFuzzerTest(data, size);
996 ExitIpv4FuzzerTest(data, size);
997 StopIpv4FuzzerTest(data, size);
998 GetActionFuzzerTest(data, size);
999 DhcpInitFuzzerTest(data, size);
1000 InitSocketFdFuzzerTest(data, size);
1001 GetPacketReadSockFdFuzzerTest(data, size);
1002 GetSigReadSockFdFuzzerTest(data, size);
1003 GetDhcpTransIDFuzzerTest(data, size);
1004 SetSocketModeFuzzerTest(data, size);
1005 ExecDhcpRenewFuzzerTest(data, size);
1006 ExecDhcpReleaseFuzzerTest(data, size);
1007 GetRandomIdFuzzerTest(data, size);
1008 InitSelectingFuzzerTest(data, size);
1009 DhcpRebootFuzzerTest(data, size);
1010 SendRebootFuzzerTest(data, size);
1011 RebootFuzzerTest(data, size);
1012 RequestingFuzzerTest(data, size);
1013 RenewingFuzzerTest(data, size);
1014 RebindingFuzzerTest(data, size);
1015 DecliningFuzzerTest(data, size);
1016 DhcpRequestHandleFuzzerTest(data, size);
1017 DhcpOfferPacketHandleFuzzerTest(data, size);
1018 ParseNetworkServerIdInfoFuzzerTest(data, size);
1019 ParseNetworkDnsInfoFuzzerTest(data, size);
1020 ParseNetworkDnsValueFuzzerTest(data, size);
1021 ParseNetworkInfoFuzzerTest(data, size);
1022 FormatStringFuzzerTest(data, size);
1023 GetDHCPServerHostNameFuzzerTest(data, size);
1024 ParseNetworkVendorInfoFuzzerTest(data, size);
1025 DhcpAckOrNakPacketHandleFuzzerTest(data, size);
1026 ParseDhcpAckPacketFuzzerTest(data, size);
1027 ParseDhcpNakPacketFuzzerTest(data, size);
1028 GetDhcpOfferFuzzerTest(data, size);
1029 DhcpResponseHandleFuzzerTest(data, size);
1030 SignalReceiverFuzzerTest(data, size);
1031 SetIpv4StateFuzzerTest(data, size);
1032 PublishDhcpResultEventFuzzerTest(data, size);
1033 }
1034
DhcpClientStateMachineExFuzzerTest(const uint8_t * data,size_t size)1035 void DhcpClientStateMachineExFuzzerTest(const uint8_t *data, size_t size)
1036 {
1037 GetPacketHeaderInfoFuzzerTest(data, size);
1038 GetPacketCommonInfoFuzzerTest(data, size);
1039 AddClientIdToOptsFuzzerTest(data, size);
1040 AddHostNameToOptsFuzzerTest(data, size);
1041 AddStrToOptsFuzzerTest(data, size);
1042 DhcpDiscoverFuzzerTest(data, size);
1043 DhcpRequestFuzzerTest(data, size);
1044 DhcpRenewFuzzerTest(data, size);
1045 DhcpReleaseFuzzerTest(data, size);
1046 DhcpDeclineFuzzerTest(data, size);
1047 IpConflictDetectFuzzerTest(data, size);
1048 FastArpDetectFuzzerTest(data, size);
1049 SlowArpDetectCallbackFuzzerTest(data, size);
1050 SlowArpDetectFuzzerTest(data, size);
1051 IsArpReachableFuzzerTest(data, size);
1052 GetCachedDhcpResultFuzzerTest(data, size);
1053 SaveIpInfoInLocalFileFuzzerTest(data, size);
1054 TryCachedIpFuzzerTest(data, size);
1055 SetConfigurationFuzzerTest(data, size);
1056 GetIpTimerCallbackFuzzerTest(data, size);
1057 StartTimerFuzzerTest(data, size);
1058 StopTimerFuzzerTest(data, size);
1059 RenewDelayCallbackFuzzerTest(data, size);
1060 RebindDelayCallbackFuzzerTest(data, size);
1061 RemainingDelayCallbackFuzzerTest(data, size);
1062 SendStopSignalFuzzerTest(data, size);
1063 CloseAllRenewTimerFuzzerTest(data, size);
1064 }
1065
1066 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)1067 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
1068 {
1069 DhcpClientStateMachineFunFuzzerTest(data, size);
1070 DhcpIpv6FunFuzzerTest(data, size);
1071 DhcpIpv6ClientFuzzerTest(data, size);
1072 DhcpIpv6EventFuzzerTest(data, size);
1073 DhcpSocketFuzzerTest(data, size);
1074 DhcpClientStateMachineFuzzerTest(data, size);
1075 DhcpClientStateMachineExFuzzerTest(data, size);
1076 return 0;
1077 }
1078 } // namespace DHCP
1079 } // namespace OHOS