DF-4139 / verdict.json
{ "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" } |