⬢ DragonFlyBSD Kernel Audit
DF-4139 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-4139",
  "status": "untested",
  "reproduced": 0,
  "impact": "none",
  "confidence": "likely",
  "verdict": "throw_rude_remark strcpys a kvasnprintf buffer capped at MSG_MAX=1024 into ioctl_reply->msg which is char[256] in non-debug builds (vinumio.h:42-45); on VINUM_CREATE the reply overlays the 1024-byte ioctl buffer so a maximal message writes 4+1024=1028 bytes - up to 4 bytes (3 chosen chars + NUL) past the kmalloc(1024) allocation (sys_generic.c:675). Additionally the static ioctl_reply dangles after any longjmp out of parse_user_config or after remove(), enabling a message-text use-after-free write when another thread holds the config lock. Live test skipped: small overflow, root-gated; the dangling-pointer UAF needs a cross-thread race.",
  "exploit_chain": "",
  "evidence": "README.md bounds math (MSG_MAX vs MAX_IOCTL_REPLY vs BUFSIZE)",
  "kernel_refs": [
    "sys/dev/raid/vinum/vinumconfig.c:114",
    "sys/dev/raid/vinum/vinumconfig.c:115",
    "sys/dev/raid/vinum/vinumio.h:42",
    "sys/dev/raid/vinum/vinumconfig.c:1679",
    "sys/dev/raid/vinum/vinumconfig.c:1693"
  ],
  "poc_changes": "n/a - analysis only",
  "attempts": 0,
  "guest_uname": "n/a",
  "runtime_sec": 0,
  "guest_dirty": 0,
  "notes": "",
  "recommended_fix": "strlcpy bounded by sizeof(ioctl_reply->msg); clear the static ioctl_reply setjmp-safely.",
  "fix_status": "not_applicable"
}