DragonFlyBSD Kernel Audit
DF-2918 / manifest.json
← back to finding ↓ download raw
{
  "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"
  ]
}