DF-2573 / run_fix_validation.sh
#!/bin/sh # run_fix_validation.sh -- FIXED-kernel validation for DF-2573 + DF-2574. # Run on a HEALTHY X86_64_NGDPOC boot whose /usr/src/sys/netgraph/ng_device.c # carries both fixes (see fix.diff in each evidence pack) and whose POC TU # was regenerated from the fixed source (NGDPOC attest sha256 249587a7...). # # Success criteria (baseline-relative): # DF-2573 A: fail_makedev injection -> ng_mkpeer error return, NO PANIC # DF-2573 B: failreadq injection -> ng_mkpeer error return, NO PANIC, # destroy_dev cleanup visible # DF-2574: cycle 20000 -> M_DEVBUF delta inuse == 0, delta memuse == 0 # normal ops: mkpeer + write/read through /dev/ngd0 + rmhook unchanged set -u cd "$(dirname "$0")" VM=../../../dfbsd-qemu/vm.sh echo "== env: attest + baseline stats ==" $VM run_root 'dmesg | grep "NGDPOC: verbatim" | tail -1; sysctl -n kern.ngdpoc.stats' 2>&1 echo "== DF-2573 A (fixed): injected make_dev failure ==" $VM run_root 'sysctl kern.ngdpoc.fail_makedev=1; sysctl -n "kern.ngdpoc.trigger=mkpeer fixA"; echo "guest still alive, rc=$?"; dmesg | tail -8' 2>&1 echo "== DF-2573 B (fixed): injected readq kmalloc failure ==" $VM run_root 'sysctl -n "kern.ngdpoc.trigger=mkpeer keepF" >/dev/null; sysctl -n kern.ngdpoc.stats; sysctl -n "kern.ngdpoc.trigger=mkpeer_failreadq fixB"; echo "guest still alive, rc=$?"; sysctl -n kern.ngdpoc.stats; ls /dev/ngd0; dmesg | tail -10' 2>&1 echo "== DF-2574 (fixed): 20000 cycles -> zero leak ==" $VM run_root 'sysctl -n "kern.ngdpoc.trigger=cycle 20000"; sysctl -n kern.ngdpoc.stats' 2>&1 echo "== normal ops unchanged: data through /dev/ngd0 ==" $VM run_root 'printf FIXOK > /dev/ngd0; sleep 1; echo "read back: [$(dd if=/dev/ngd0 bs=64 2>/dev/null)]"; sysctl -n "kern.ngdpoc.trigger=rmhook keepF"; sysctl -n kern.ngdpoc.stats; ls /dev/ngd0 2>&1 || true' 2>&1 |