DF-3453 / manifest.json
{ "finding_id": "DF-3453", "title": "pfil COW hook-list free races pfil_run_hooks walkers on non-netisr threads (softclock via ip_mroute tbf, IDIRECT bridge interrupts) - UAF with indirect call; stock INVARIANTS kernel panics on the mroute softclock ip_output path", "verdict": "reproduced", "impact": "panic", "confidence": "likely", "reproduce": { "build": "cc -O2 -o pfilrace_feeder pfilrace_feeder.c; cd prhook && make -m /usr/src/share/mk", "run": "kldload ip_mroute; ./pfilrace_feeder <vtnet0-addr> 1000 (INVARIANTS kernel: panics in seconds); kldload prhook.ko; sysctl -w net.prhook_delay_ms=150; sysctl -w net.prhook_toggle=1; ./pfilrace_feeder <addr> 1000 &; sysctl -w net.prhook_toggle=1 (mutation; see VERDICT for the CPU-pinning caveat)", "expected": "INVARIANTS: 'panic: thread ... is not within netisr_ncpus' with tbf_reprocess_q<-softclock_handler backtrace. Production kernel: softclock pegged in pfil walk, spray_hit 2/2; end-to-end wild call blocked by same-CPU LWKT serialization on this 6-vCPU guest." }, "kernel_refs": [ "sys/net/pfil.c:47", "sys/net/pfil.c:93", "sys/net/pfil.c:110", "sys/net/pfil.c:238", "sys/net/pfil.c:244", "sys/net/pfil.c:346", "sys/net/pfil.c:351", "sys/net/netisr.c:229", "sys/net/netisr.c:292", "sys/netinet/ip_output.c:185", "sys/netinet/ip_output.c:529", "sys/net/ip_mroute/ip_mroute.c:1792", "sys/net/ip_mroute/ip_mroute.c:1874", "sys/net/ip_mroute/ip_mroute.c:1926", "sys/net/ip_mroute/ip_mroute.c:1931", "sys/kern/kern_timeout.c:423", "sys/net/if_ethersubr.c:1457", "sys/net/bridge/if_bridge.c:4097" ], "artifacts": [ "prhook.c", "prhook/Makefile", "pfilrace_feeder.c", "pfilrace.sh", "run.sh", "build.sh", "build.log", "run.log", "panic.txt", "env.txt", "fix.diff", "VERDICT.md", "manifest.json", "verdict.json" ] } |