DF-4079 / manifest.json
{ "finding_id": "DF-4079", "title": "oce_rx builds mbuf chain with m_pkthdr.len from the CQE 14-bit pkt_size unclamped to num_fragments x frag_size: chain up to 2047 bytes shorter than claimed, handed to if_input — stack offset-walkers (m_copydata KASSERT) panic, TCP desynchronizes", "verdict": "reproduced", "impact": "panic (mbuf contract violation: chain up to 2047 bytes shorter than pkthdr.len; demonstrated kernel panic via the cited m_copydata consumer; TCP-desync primitive)", "confidence": "certain", "reproduce": { "build": "sh build.sh (make -m /usr/src/share/mk; KLD only, no driver code — extern-binds the running kernel's own oce_rq_handler)", "run": "sh run.sh baseline (survives, prints both CHAIN INVARIANT VIOLATION markers); fresh boot + sh run.sh panic (kernel panic)", "expected": "baseline: two chains delivered claiming 16383 bytes holding 2048/14336 bytes; panic: 'panic: m_copydata: offset > size of mbuf chain' with oce_rx in the backtrace; fixed kernel: FIX CONFIRMED (chains=0 violations=0) and panic mode survives" }, "kernel_refs": [ "sys/dev/netif/oce/oce_if.c:1260", "sys/dev/netif/oce/oce_if.c:1274", "sys/dev/netif/oce/oce_if.c:1290", "sys/dev/netif/oce/oce_if.c:1291", "sys/dev/netif/oce/oce_if.c:1299", "sys/dev/netif/oce/oce_if.c:1373", "sys/dev/netif/oce/oce_if.c:1381", "sys/dev/netif/oce/oce_hw.h:2531", "sys/dev/netif/oce/oce_hw.h:2549", "sys/kern/uipc_mbuf.c:1679" ], "artifacts": [ "README.md", "VERDICT.md", "df4079_oce_poc.c", "Makefile", "build.sh", "run.sh", "build.log", "run.log", "panic.txt", "panic_console_full.log", "fix.diff", "fix_build.log", "fix_run.log", "env.txt", "manifest.json", "verdict.json" ] } |