DF-2918 / manifest.json
{ "finding_id": "DF-2918", "manifest_version": 1, "title": "Unsynchronized vfsconf registry: sys_mount vs kldunload TOCTOU/deadlock (UAF by construction)", "verdict": "reproduced", "impact": "dos", "confidence": "certain", "reproduce": { "build": "cc -O2 -o /root/mountloop mountloop.c && cc -O2 -o /root/kldloop kldloop.c && cc -O2 -o /root/sysctlloop sysctlloop.c", "setup": "pw useradd -m -n poc; pw usermod -n poc -s /bin/sh; mkdir -p /home/poc/mnt; cp /root/sysctlloop /home/poc/; chown -R poc:poc /home/poc; sysctl vfs.usermount=1; kldload /boot/kernel/fuse.ko", "run": "MODE=race GAP=10000 sh race.sh 3 600 (control: MODE=control sh race.sh 4 90)", "expected": "control: >600k mount attempts per mounter, clean. race (stock kernel): all mounters wedge permanently in D-state (wchan ncplk/syncexit/vnode) within 15-100 s, fuse.ko pinned, mount(2)/kld* dead system-wide, SIGKILL ineffective, shutdown and crash-dump sync hang; only hard reset recovers. race (fix.diff kernel): full 600 s, 5-6.6M attempts per mounter, no wedge." }, "kernel_refs": [ "sys/kern/vfs_init.c:458-480", "sys/kern/vfs_init.c:469", "sys/kern/vfs_init.c:240-308", "sys/kern/vfs_init.c:264-284", "sys/kern/vfs_syscalls.c:313", "sys/kern/vfs_syscalls.c:354-359", "sys/kern/vfs_syscalls.c:315-342", "sys/kern/vfs_syscalls.c:468", "sys/kern/vfs_syscalls.c:1079", "sys/kern/vfs_mount.c:340-351", "sys/kern/vfs_sync.c:318-322", "sys/kern/kern_linker.c:477-569" ], "artifacts": [ "README.md", "VERDICT.md", "mountloop.c", "kldloop.c", "sysctlloop.c", "race.sh", "run.log", "run.2.log", "panic.txt", "env.txt", "fix.diff", "manifest.json", "verdict.json" ] } |