DragonFlyBSD Kernel Audit
DF-0044 / manifest.json
← back to finding ↓ download raw
{
  "finding_id": "DF-0044",
  "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul  2 06:02:54 UTC 2026     root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC  x86_64",
  "code_hash": "b9a306d0f9e7f73e4c245b4cc038294a3be6c13dd327ab55b89b5a9764a94a47",
  "tested_at": "2026-07-22T18:10:00Z",
  "verdict": "NOT REPRODUCED (race too tight) -- code-level bug CONFIRMED",
  "impact": "none (on this kernel); theoretical panic/info-leak if the race is won",
  "confidence": "certain (code-level); likely (race too tight to demonstrate)",
  "reproduce": {
    "build": "./build.sh",
    "run": "./run.sh 60",
    "expected": "no effect on this guest (not reproduced); exits cleanly. See VERDICT.md."
  },
  "kernel_refs": [
    "sys/kern/vfs_mount.c:1235",
    "sys/kern/vfs_mount.c:1240",
    "sys/kern/vfs_mount.c:1245",
    "sys/kern/vfs_mount.c:1247",
    "sys/kern/vfs_mount.c:413",
    "sys/kern/vfs_mount.c:418",
    "sys/kern/vfs_mount.c:420",
    "sys/kern/vfs_mount.c:421",
    "sys/kern/vfs_mount.c:756",
    "sys/kern/vfs_mount.c:784",
    "sys/kern/vfs_mount.c:393",
    "sys/kern/vfs_mount.c:399",
    "sys/kern/vfs_mount.c:401",
    "sys/kern/vfs_mount.c:403",
    "sys/kern/vfs_cache.c:5213",
    "sys/kern/vfs_cache.c:5214",
    "sys/kern/vfs_cache.c:5224",
    "sys/kern/vfs_cache.c:5227",
    "sys/kern/vfs_cache.c:5228",
    "sys/kern/vfs_syscalls.c:1040",
    "sys/kern/vfs_syscalls.c:1066",
    "sys/kern/vfs_syscalls.c:1069",
    "sys/kern/vfs_syscalls.c:1108",
    "sys/kern/vfs_syscalls.c:1110",
    "sys/kern/vfs_syscalls.c:1117",
    "sys/kern/vfs_syscalls.c:931",
    "sys/kern/vfs_syscalls.c:946",
    "sys/kern/vfs_syscalls.c:988",
    "sys/kern/vfs_nlookup.c:1056",
    "sys/vfs/procfs/procfs_map.c:181"
  ],
  "artifacts": [
    {
      "path": "mount_uaf.c",
      "type": "trigger-source",
      "desc": "unprivileged PoC: cycler threads mount+unmount a tmpfs the binary sits inside, while reader threads read /proc/self/map (driving vn_fullpath guess=1 -> cache_fullpath -> mount_get_by_nc -> deref of new_mp->mnt_ncmounton)"
    },
    {
      "path": "mount_uaf_root.c",
      "type": "trigger-source",
      "desc": "root-only variant using MNT_FORCE for a faster free-side cycle (defeated by allproc_scan SIGKILL of the test process itself)"
    },
    {
      "path": "build.sh",
      "type": "build-script",
      "desc": "cc -pthread -O2 -o mount_uaf mount_uaf.c (and the root variant)"
    },
    {
      "path": "run.sh",
      "type": "run-script",
      "desc": "sets up the cycled mount, hosts the binary inside, runs the unprivileged variant"
    },
    {
      "path": "build.log",
      "type": "build-log",
      "desc": "final successful build of both variants on the guest"
    },
    {
      "path": "run.log",
      "type": "run-log",
      "desc": "decisive 60s unprivileged run: 288137 deref iters, 2 successful free cycles, no panic, guest stayed up"
    },
    {
      "path": "panic.txt",
      "type": "panic-signature",
      "desc": "grep -iE 'fatal trap|panic:|Stopped at|db> ' dfbsd-qemu/boot.log -> EMPTY. Includes the kernel's own race-detection messages as evidence the race was exercised."
    },
    {
      "path": "env.txt",
      "type": "environment",
      "desc": "uname, cc version, vfs.usermount, kernel config (X86_64_GENERIC, non-INVARIANTS)"
    },
    {
      "path": "fix.diff",
      "type": "suggested-fix",
      "desc": "git-apply-able unified diff: add mount_hold(mp) in mount_get_by_nc (matching vfs_getvfs) + matching mount_drop in the cache_fullpath caller"
    },
    {
      "path": "VERDICT.md",
      "type": "verdict",
      "desc": "full narrative: code-level proof, why the race is too tight on this kernel, classification"
    },
    {
      "path": "README.md",
      "type": "readme",
      "desc": "PoC overview, build/run instructions, expected output"
    },
    {
      "path": "manifest.json",
      "type": "manifest",
      "desc": "this catalog"
    },
    {
      "path": "fix_apply.log",
      "type": "apply-log",
      "desc": "patch --dry-run output proving fix.diff applies cleanly on with-src"
    },
    {
      "path": "../fix_build_combined.log",
      "type": "build-log",
      "desc": "Combined 41-finding kernel build (rc=0, -Werror clean)"
    },
    {
      "path": "../fix_build_summary.txt",
      "type": "build-summary",
      "desc": "Summary of the combined 41-finding kernel build"
    }
  ]
}