1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <cstddef>
#include <cstdint>
#include "packeteer/net/checksum.hpp"
#include "packeteer/net/ipv4.hpp"
using namespace packeteer::net;
// internet_checksum() itself takes arbitrary bytes directly. The
// verify_*_checksum_ipv4() wrappers additionally need two addresses,
// so the first 8 bytes of input become src/dst and the rest is treated
// as the header/segment/datagram under test - exercises the
// pseudo-header construction (detail::build_ipv4_pseudo_header) along
// with the checksum math itself.
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
internet_checksum({data, size});
verify_ipv4_checksum({data, size});
if (size < 8) return 0;
Ipv4Address src{{data[0], data[1], data[2], data[3]}};
Ipv4Address dst{{data[4], data[5], data[6], data[7]}};
std::span<const unsigned char> rest{data + 8, size - 8};
verify_tcp_checksum_ipv4(src, dst, rest);
verify_udp_checksum_ipv4(src, dst, rest);
return 0;
}
|