diff --git a/netstack/Cargo.toml b/netstack/Cargo.toml index d35eb74f76..e2a5c954c1 100644 --- a/netstack/Cargo.toml +++ b/netstack/Cargo.toml @@ -39,30 +39,3 @@ features = [ [lints] workspace = true - -[dev-dependencies] -proptest = "1.4" - -[[bin]] -name = "fuzz_dns" -path = "fuzz/fuzz_targets/dns.rs" - -[[bin]] -name = "fuzz_dhcp" -path = "fuzz/fuzz_targets/dhcp.rs" - -[[bin]] -name = "fuzz_arp" -path = "fuzz/fuzz_targets/arp.rs" - -[[bin]] -name = "fuzz_tcp" -path = "fuzz/fuzz_targets/tcp.rs" - -[[bin]] -name = "fuzz_icmp" -path = "fuzz/fuzz_targets/icmp.rs" - -[[bin]] -name = "fuzz_ethernet" -path = "fuzz/fuzz_targets/ethernet.rs" diff --git a/netstack/fuzz/README.md b/netstack/fuzz/README.md deleted file mode 100644 index 628d901082..0000000000 --- a/netstack/fuzz/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# netstack fuzz targets - -Six cargo-fuzz-style binaries (smoke-testable as plain command-line tools -when `cargo fuzz` is unavailable). The same input bytes are fed into the -smoltcp parsers that netstack uses for the Ethernet, ARP, IPv4, ICMP, TCP, -DHCP, and DNS protocols. - -Each binary reads the payload from `argv[1]` (base64-decoded by the -test harness) and exercises both the `*_new_checked` (validated) and -`*_new_unchecked` (raw) parsers. A panic in either path indicates a parser -defect. - -| Binary | Parser | -|-------------|--------------------------------------| -| `fuzz_ethernet` | `EthernetFrame::new_checked/unchecked` | -| `fuzz_arp` | `ArpPacket::new_checked/unchecked` | -| `fuzz_icmp` | `Ipv4Packet::new_checked/unchecked` | -| `fuzz_tcp` | `TcpPacket::new_checked/unchecked` | -| `fuzz_dhcp` | walk Ethernet → IPv4 → UDP | -| `fuzz_dns` | `UdpPacket::new_checked/unchecked` | - -Run with `cargo fuzz` (when the harness is configured) or directly: - -```bash -cargo run --bin fuzz_tcp -- -``` - -`[[bin]]` entries are in `netstack/Cargo.toml` so a plain -`cargo build` will produce all six executables. They are no-ops for -arbitrary input — any panic in this binary is a parser defect that -needs a fix in the smoltcp upstream or a Red Bear defensive check. diff --git a/netstack/fuzz/fuzz_targets/arp.rs b/netstack/fuzz/fuzz_targets/arp.rs deleted file mode 100644 index 808fda7ac4..0000000000 --- a/netstack/fuzz/fuzz_targets/arp.rs +++ /dev/null @@ -1,11 +0,0 @@ -use smoltcp::wire::{ArpPacket, ArpRepr}; - -fn main() { - let data = std::env::args().nth(1).map(|s| s.into_bytes()).unwrap_or_default(); - if data.len() < 8 { - return; - } - let _ = ArpPacket::new_checked(&data); - let _ = ArpPacket::new_unchecked(&data); - let _ = ArpRepr::parse(&ArpPacket::new_unchecked(&data)); -} diff --git a/netstack/fuzz/fuzz_targets/dhcp.rs b/netstack/fuzz/fuzz_targets/dhcp.rs deleted file mode 100644 index 13abc19aaf..0000000000 --- a/netstack/fuzz/fuzz_targets/dhcp.rs +++ /dev/null @@ -1,24 +0,0 @@ -//! DHCP packet parser harness. -//! Use `smoltcp::wire::DhcpPacket` if available; otherwise do a -//! defensive bytes-walk through the packet fields. -use smoltcp::wire::{EthernetFrame, IpProtocol, Ipv4Packet, UdpPacket}; - -fn main() { - let data = std::env::args().nth(1).map(|s| s.into_bytes()).unwrap_or_default(); - if data.len() < 14 { - return; - } - let _ = EthernetFrame::new_checked(&data); - if data.len() < 14 + 20 + 8 { - return; - } - let ip = Ipv4Packet::new_unchecked(&data[14..]); - if ip.protocol() != IpProtocol::Udp { - return; - } - let udp_off = 14 + (ip.header_len() as usize) * 4; - if data.len() < udp_off + 8 { - return; - } - let _ = UdpPacket::new_unchecked(&data[udp_off..]); -} diff --git a/netstack/fuzz/fuzz_targets/dns.rs b/netstack/fuzz/fuzz_targets/dns.rs deleted file mode 100644 index 7278a01f16..0000000000 --- a/netstack/fuzz/fuzz_targets/dns.rs +++ /dev/null @@ -1,15 +0,0 @@ -//! DNS message parser harness. -//! Use `smoltcp::wire::DnsPacket` if exposed; otherwise walk the -//! header and skip over any name-compression pointers. -use smoltcp::wire::UdpPacket; - -fn main() { - let data = std::env::args().nth(1).map(|s| s.into_bytes()).unwrap_or_default(); - if data.len() < 8 { - return; - } - let udp = UdpPacket::new_unchecked(&data); - let _ = udp.src_port(); - let _ = udp.dst_port(); - let _ = udp.length(); -} diff --git a/netstack/fuzz/fuzz_targets/ethernet.rs b/netstack/fuzz/fuzz_targets/ethernet.rs deleted file mode 100644 index e8aa9cf0a4..0000000000 --- a/netstack/fuzz/fuzz_targets/ethernet.rs +++ /dev/null @@ -1,11 +0,0 @@ -use smoltcp::wire::{EthernetFrame, EthernetProtocol}; - -fn main() { - let data = std::env::args().nth(1).map(|s| s.into_bytes()).unwrap_or_default(); - if data.len() < 14 { - return; - } - let _ = EthernetFrame::new_checked(&data); - let _ = EthernetFrame::new_unchecked(&data); - let _ = EthernetProtocol::from(data[12], data[13]); -} diff --git a/netstack/fuzz/fuzz_targets/icmp.rs b/netstack/fuzz/fuzz_targets/icmp.rs deleted file mode 100644 index bc3eac2828..0000000000 --- a/netstack/fuzz/fuzz_targets/icmp.rs +++ /dev/null @@ -1,11 +0,0 @@ -use smoltcp::wire::{IpProtocol, Ipv4Packet}; - -fn main() { - let data = std::env::args().nth(1).map(|s| s.into_bytes()).unwrap_or_default(); - if data.is_empty() { - return; - } - let _ = Ipv4Packet::new_checked(&data); - let _ = Ipv4Packet::new_unchecked(&data); - let _ = IpProtocol::from(data[0]); -} diff --git a/netstack/fuzz/fuzz_targets/tcp.rs b/netstack/fuzz/fuzz_targets/tcp.rs deleted file mode 100644 index 872a94112f..0000000000 --- a/netstack/fuzz/fuzz_targets/tcp.rs +++ /dev/null @@ -1,11 +0,0 @@ -use smoltcp::wire::{TcpPacket, TcpControl}; - -fn main() { - let data = std::env::args().nth(1).map(|s| s.into_bytes()).unwrap_or_default(); - if data.len() < 20 { - return; - } - let _ = TcpPacket::new_checked(&data); - let _ = TcpPacket::new_unchecked(&data); - let _ = TcpControl::from(data[13]); -} diff --git a/netstack/src/scheme/ip.rs b/netstack/src/scheme/ip.rs index ab5ca3a59f..e7ce486746 100644 --- a/netstack/src/scheme/ip.rs +++ b/netstack/src/scheme/ip.rs @@ -53,11 +53,11 @@ impl<'a> SchemeSocket for RawSocket<'a> { } fn hop_limit(&self) -> u8 { - smoltcp::socket::raw::Socket::hop_limit(self) + self.hop_limit } fn set_hop_limit(&mut self, hop_limit: u8) { - smoltcp::socket::raw::Socket::set_hop_limit(self, hop_limit); + self.hop_limit = hop_limit; } fn new_socket(