From fbedc55d5aa861c381701c9f913b34ee7ab57ec4 Mon Sep 17 00:00:00 2001 From: srdusr <99972264+srdusr@users.noreply.github.com> Date: Tue, 21 May 2024 22:24:00 +0200 Subject: Add GUI parity for -c/-a, mDNS/SSH dissectors, and two new fuzz harnesses GUI parity: checksum_status()/reassembled_http_status() moved out of main.cpp into a shared wireframe/packet_diagnostics.hpp so the GUI can show the same -c/-a diagnostics for the selected packet without duplicating the Ethernet/IPv4/TCP walk. Visually verified under Xvfb with the same split-segment scenario used to verify -a on the CLI. Two new L7 dissectors: mDNS (reuses parse_dns outright - RFC 6762 keeps DNS's wire format, just a different port) and SSH's cleartext identification banner. Live-verified against this machine's real sshd and a real DNS-wire-format packet sent to port 5353. Two new fuzz harnesses (fuzz_checksum, fuzz_tcp_reassembly) covering code added here that the original nine harnesses never touched. All 12 run clean across ~90M executions with no crashes. NAMES.md and PLAN.md updated with this round's decisions and naming candidates. --- fuzz/fuzz_checksum.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 fuzz/fuzz_checksum.cpp (limited to 'fuzz/fuzz_checksum.cpp') diff --git a/fuzz/fuzz_checksum.cpp b/fuzz/fuzz_checksum.cpp new file mode 100644 index 0000000..f490d1c --- /dev/null +++ b/fuzz/fuzz_checksum.cpp @@ -0,0 +1,27 @@ +#include +#include + +#include "wireframe/net/checksum.hpp" +#include "wireframe/net/ipv4.hpp" + +using namespace wireframe::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 rest{data + 8, size - 8}; + + verify_tcp_checksum_ipv4(src, dst, rest); + verify_udp_checksum_ipv4(src, dst, rest); + return 0; +} -- cgit v1.2.3