⬢ DragonFlyBSD Kernel Audit
DF-3052 / run3052.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-3052: forced unmount racing pending async reads -> nfsm_request_bio
# early-abort leaks struct nfsm_info (M_NFSREQ).
vmstat -m | grep "NFS req" > /tmp/3052.before
dmesg | grep -c "early abort" > /tmp/3052.dmesg.before
dd if=/dev/urandom of=/export/big52 bs=1m count=64 2>/dev/null
mkdir -p /mnt/m52
i=0
while [ $i -lt 20 ]; do
  mount -t nfs -o tcp 127.0.0.1:/export /mnt/m52 2>/dev/null || { i=$((i+1)); continue; }
  ( su maxx -c "dd if=/mnt/m52/big52 of=/dev/null bs=64k" > /dev/null 2>&1 ) &
  sleep 0.05
  umount -f /mnt/m52 2>/dev/null
  wait
  i=$((i+1))
done
sleep 1
vmstat -m | grep "NFS req" > /tmp/3052.after
dmesg | grep -c "early abort" > /tmp/3052.dmesg.after
echo "MALLOC before: $(cat /tmp/3052.before)"
echo "MALLOC after:  $(cat /tmp/3052.after)"
echo "early-abort msgs: before=$(cat /tmp/3052.dmesg.before) after=$(cat /tmp/3052.dmesg.after)"
echo DF3052_DONE