Files
Rayhaan JaufeerallyandClaude Fable 5.1 9367c38907 Remove policy scripts
Rhai made a decision about a route cost one to three microseconds,
some two hundred times what the same costs in Rust. That was bearable
where a function is asked once for an UPDATE, and is not where every
route is weighed against every peer, as it is when routes are passed
on. What is wanted of a policy (mark routes by where they came from,
mark what is announced, let communities say who is told what) needs no
language; it is to be configuration, done natively.

Kept from that work: route selection goes by a LOCAL_PREF that policy
set on a route from an external peer, and the lab's configuration can
be added to by a phase.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-02 22:47:57 +02:00

2.0 KiB

Fuzz targets

Coverage-guided fuzzing of everything that reads input we do not control. The property tests (cargo test, e.g. crates/packet/tests/properties.rs) check the same things on generated input and run on every build; these targets go further by letting libFuzzer follow code coverage for as long as you leave them running.

Target Input
message Raw bytes as they come off a TCP connection
message_body A message body behind a correct header (reaches the body parsers)
prefix_text A prefix as text
config The configuration file
rtr A stream of RTR PDUs, as an RPKI cache sends them
netlink Messages from the kernel's routing socket
attrs The routing table's reading of stored attribute bytes

For the two message targets a finding is either a panic, or a message the decoder accepted that cannot be written and read back as itself.

Running

libFuzzer needs a nightly toolchain and cargo-fuzz:

rustup toolchain install nightly
cargo install cargo-fuzz

Then, from this directory:

cargo +nightly fuzz run message_body corpus/message_body seeds/message_body -- -max_total_time=300

The first directory is the working corpus, which the fuzzer adds to and which is not checked in. seeds/ holds a few valid inputs to start from. Leave out -max_total_time to run until interrupted.

When it finds something

The input is saved under artifacts/<target>/. Reproduce it with

cargo +nightly fuzz run message_body artifacts/message_body/crash-...

Fix the bug, and add a unit test with the input next to the code it broke, so that cargo test keeps it fixed without anyone having to run the fuzzer.