DF-2663 / stageB_df2663.sh
#!/bin/sh # DF-2663 kernel-B (fix) validation: # B1: DIOCGPART failure + oversized forged volume -> mount must be REJECTED # (fail-closed) instead of silently skipping the containment check. # B2: stock vn-truncate stale-read scenario (honest volu_size) -> mount OK # but read must return EIO, NOT 64KB of stale memory. # B3: regression - normal mount/read of intact image works. exec > /root/poc/runB.log 2>&1 set -x uname -a | head -1 for m in /mnt/h2; do timeout 10 umount -f $m 2>/dev/null; done dmsetup remove_all 2>/dev/null vnconfig -u vn0 2>/dev/null mkdir -p /mnt/h2 echo "=== B1: sysctl=1 + forged 320MB volume -> expect mount REJECTED" sysctl vfs.hammer2.df2663_fail_diocgpart=1 /root/poc/forge2663 /root/poc/base.img /root/poc/leak320B.img 0xC000010 0x00 0x14000000 vnconfig -c vn0 /root/poc/leak320B.img truncate -s 201326592 /root/poc/leak320B.img mount -t hammer2 -o ro /dev/vn0@leakfs /mnt/h2 echo "B1_MOUNT_RC=$? (expect 1)" dmesg | tail -2 ls /mnt/h2 2>&1 sysctl vfs.hammer2.df2663_fail_diocgpart=0 vnconfig -u vn0 echo "=== B2: honest volu_size + truncated backing -> expect EIO on read" /root/poc/forge2663 /root/poc/base.img /root/poc/leakB2.img 0xC000010 0x00 0 vnconfig -c vn0 /root/poc/leakB2.img truncate -s 201326592 /root/poc/leakB2.img mount -t hammer2 -o ro /dev/vn0@leakfs /mnt/h2 echo "B2_MOUNT_RC=$? (expect 0)" cat /mnt/h2/leakfile > /root/poc/leakB2.bin 2>/root/poc/leakB2.err echo "B2_READ_RC=$? (expect 1)" cat /root/poc/leakB2.err ls -l /root/poc/leakB2.bin umount /mnt/h2 vnconfig -u vn0 echo "=== B3: regression - intact image mounts and reads correctly" vnconfig -c vn0 /root/poc/base.img mount -t hammer2 -o ro /dev/vn0@leakfs /mnt/h2 echo "B3_MOUNT_RC=$? (expect 0)" md5 /mnt/h2/leakfile /root/poc/rand64 umount /mnt/h2 vnconfig -u vn0 echo KERNEL_B_VALIDATION_DONE |