{
  "finding_id": "DF-5109",
  "title": "lockdrive() pid-based recursion admits second same-process thread into drive critical section (double vn_close / double Free -> BADFREE2 panic)",
  "kernel_refs": [
    "sys/dev/raid/vinum/vinumlock.c:59",
    "sys/dev/raid/vinum/vinumlock.c:87",
    "sys/dev/raid/vinum/vinumioctl.c:296",
    "sys/dev/raid/vinum/vinumio.c:205",
    "sys/dev/raid/vinum/vinumio.c:216",
    "sys/dev/raid/vinum/vinumconfig.c:576",
    "sys/dev/raid/vinum/vinumio.c:648"
  ],
  "trigger": "root process spawns vinum daemon via VINUM_DAEMON (runs in issuer's process), then races VINUM_SETSTATE(down)/VINUM_REMOVE against VINUM_CREATE(force-up) on the same drive",
  "artifacts": [
    "lockdrive_recursion.c",
    "setup.sh",
    "build.sh",
    "run.sh",
    "panic.txt",
    "fix.diff",
    "VERDICT.md",
    "manifest.json",
    "verdict.json"
  ],
  "reproduce": {
    "build": "cd /root/poc && cc -O2 -pthread -o lockdrive_recursion lockdrive_recursion.c && cc -O2 -o vcreate vcreate.c",
    "run": "sh /root/poc/setup.sh && cd /root/poc && ./lockdrive_recursion 60 6",
    "expected": "vulnerable kernel: panic: BADFREE2, trace _kfree/_kfree/mapped_ioctl/syscall2, guest wedged in DDB (db>) within seconds-to-minutes, 2/2 runs; patched kernel: run completes, guest stays up"
  }
}
