⬢ DragonFlyBSD Kernel Audit
DF-2574 / run_fix_validation.sh
← back to finding ↓ download raw
#!/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