DF-5109 / manifest.json
{ "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" } } |