DragonFlyBSD Kernel Audit
DF-2832 / race_stock2.sh
← back to finding ↓ download raw
#!/bin/sh
# DF2832 STOCK rerun (root, guest, STOCK kernel #0).
# Both unpriv sides now actually execute (binaries in an exec-allowed path).
ITER=${1:-10}
IMG=/root/h2img
MNT=/mnt/t
B=/usr/local/df2832

rm -f $IMG
dd if=/dev/zero of=$IMG bs=1m count=0 seek=512 >/dev/null 2>&1
vnconfig -u vn0 >/dev/null 2>&1
vnconfig -c -S 512m vn0 $IMG
newfs_hammer2 /dev/vn0 >/dev/null 2>&1
mkdir -p $MNT
sysctl vfs.hammer2.limit_dirty_chains=16 >/dev/null
sysctl vfs.hammer2.limit_dirty_inodes=4 >/dev/null

n=0
while [ $n -lt $ITER ]; do
	mount_hammer2 /dev/vn0 $MNT >/dev/null 2>&1 || { echo "[$n] mount failed"; n=$((n+1)); continue; }
	chmod 777 $MNT
	i=0
	while [ $i -lt 3 ]; do su -m nobody -c "$B/dirty_writer /mnt/t/w$i.dat 60 >&/dev/null &"; i=$((i+1)); done
	i=0
	while [ $i -lt 6 ]; do su -m nobody -c "$B/churn_open /mnt/t 60 >&/dev/null &"; i=$((i+1)); done
	echo "[$n] storm on: $(pgrep -u nobody | wc -l) procs"
	sleep 2
	timeout 90 umount -f $MNT 2>&1 | head -1
	n=$(( n + 1 ))
done
killall -u nobody churn_open dirty_writer >/dev/null 2>&1
sleep 1
vnconfig -u vn0 >/dev/null 2>&1
dmesg | grep -iE "panic|fault" | tail -3
echo "STOCK-RERUN-DONE ($ITER iterations)"