⬢ DragonFlyBSD Kernel Audit
DF-3178 / run_full.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-3178 — full instrumented run: mount census-lie image, verify wiring,
# probe which syscall wedges (open/statfs/getfsstat) with procstat -kk
# kernel-stack capture, then unmount + verify release.
set -
cd "$(dirname "$0")"
CFG=../../../dfbsd-qemu/config
SSH="ssh -F $CFG -o ConnectTimeout=8 -o BatchMode=yes"
SCP="scp -F $CFG -o ConnectTimeout=8 -o BatchMode=yes"

python3 craft_img.py df3178w.img wiring
$SCP df3178w.img dfbsd:/tmp/df3178.img
$SCP mount_ro.c statfs_probe.c dfbsd:/tmp/
$SSH dfbsd 'sh -c "cc -O2 -I/usr/src/sys -o /root/mount_ro /tmp/mount_ro.c && cc -O2 -o /root/statfs_probe /tmp/statfs_probe.c && echo BUILD_OK"'

cat > /tmp/df3178_full.sh <<'GOEOF'
#!/bin/sh
echo "== pre-mount =="
vmstat -m | grep -i hpfs || echo "(no HPFS rows)"
sysctl vm.stats.vm.v_free_count
mkdir -p /tmp/hpfsmp
vnconfig -u vn0 2>/dev/null
vnconfig vn0 /tmp/df3178.img || exit 1
START=$(date +%s)
/root/mount_ro /dev/vn0 /tmp/hpfsmp || { echo MOUNT_FAILED; exit 1; }
END=$(date +%s)
echo "MOUNT_RC=0 wall=$((END-START))s"
echo "== post-mount =="
vmstat -m | grep -i hpfs
sysctl vm.stats.vm.v_free_count
echo "== probe (each syscall, 10s alarm) =="
( /root/statfs_probe /tmp/hpfsmp > /tmp/probe.out 2>&1; echo PROBE_EXIT=$? >> /tmp/probe.out ) &
sleep 35
cat /tmp/probe.out
echo "== kernel stacks of probe (if stuck) =="
procstat -kk $(pgrep statfs_probe) 2>/dev/null || echo NO_PROBE_PROC
echo "== statfs via syscall from sh (sanity) =="
echo "== unmount + release =="
umount /tmp/hpfsmp && echo UMOUNT_OK
sleep 1
vmstat -m | grep -i hpfs || echo "(HPFS rows gone)"
sysctl vm.stats.vm.v_free_count
vnconfig -u vn0 && echo VN_RELEASED
GOEOF

$SCP /tmp/df3178_full.sh dfbsd:/tmp/
$SSH dfbsd "sh /tmp/df3178_full.sh"
echo "FULL_EXIT=$?"