⬢ DragonFlyBSD Kernel Audit
DF-3145 / run_guest.sh
← back to finding ↓ download raw
#!/bin/sh
# DF-3145: hpfs_cpinit error-path leak of hpm_cpdblk
# (hpfs_subr.c:276 kmalloc, :283-286 bread failure returns without kfree).
# Image: sp_cpinum=0x4000 (16384 * sizeof(struct cpdblk)=16 -> 256 KiB per
# failed mount), sp_cpi far past EOF -> bread fails immediately.
# Observable: M_HPFSMNT "MemUse" in vmstat -m grows ~256 KiB per failed
# mount attempt; caller cleanup (hpfs_bmdeinit) never frees cpdblk.
echo "===== DF-3145: hpfs_cpinit cpdblk leak on failed mounts"
vmstat -m | grep -i hpfs
M0=$(vmstat -m | awk '/hpfs/ {print $3}' | tr -d 'KMG' )
I0=$(vmstat -m | awk '/hpfs/ {print $2}')
echo "baseline M_HPFSMNT: inuse=$I0 memuse=$M0"
mkdir -p /mnt/df3145
i=0
fail=0
while [ $i -lt 50 ]; do
	if ! mount_hpfs -o ro /dev/vn1 /mnt/df3145 2>/dev/null; then
		fail=$((fail+1))
	fi
	i=$((i+1))
done
echo "mount attempts=50 failed=$fail"
M1=$(vmstat -m | awk '/hpfs/ {print $3}' | tr -d 'KMG')
I1=$(vmstat -m | awk '/hpfs/ {print $2}')
echo "after     M_HPFSMNT: inuse=$I1 memuse=$M1"
vmstat -m | grep -i hpfs
echo "DONE-DF3145"