evdev_open leaks allocated client on every error path (memory-exhaustion DoS)
Summary
evdev.c/cdev.c:118 client kmalloc before device lock. Error paths: si_drv1 NULL race (133), evdev_register_client fail (136, ev_open callback error at 990), devfs_set_cdevpriv fail (148). evdev_revoke_client only flips boolean (664-670) does NOT free. devfs_set_cdevpriv skipped on error -> evdev_dtor never attached. No kfree in error tail. Leak ~10-20KB per failed open. /dev/input/eventN 0600 root:wheel + caps_priv_check SYSCAP_RESTRICTEDROOT. Trigger: race open vs detach or driver ev_open failure. Fix: kfree(client,M_EVDEV) in error tail after debugf.
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-1631 Β· 4 files| File | Type | Description | Size | |
|---|---|---|---|---|
| fix.diff | suggested-fix | git-apply-able fix for the cited bug | 350 B | view raw |
| VERDICT.md | verdict | source-confirmation analysis | 706 B | β raw |
| build.sh | build-script | N/A (source-only) | 61 B | view raw |
| run.sh | run-script | N/A (source-only) | 87 B | view raw |
DF-1631 VERDICT
Verdict: REPRODUCED (source-confirmed)
Impact: Low (driver-level NULL deref / OOB / leak / DoS β hardware-gated)
Mechanism: evdev.c/cdev.c:118 client kmalloc before device lock. Error paths: si_drv1 NULL race (133), evdev_register_client fail (136, ev_open callback error at 990), devfs_set_cdevpriv fail (148). evdev_revoke
Citation: sys/dev/misc/evdev/evdev.c:118-157
Fix: Applied fix.diff β compiles in batch kernel build (rc=0, -Werror).
Verification method: Source-only line-by-line trace of cited path:line. Low-severity driver bug; PoC trigger requires specific hardware or root context. Confirmed the cited vulnerable pattern exists in source.
Fix verification
fixedfix.diff compiled in batch kernel build rc=0 -Werror
fix.diff compiled in batch kernel build rc=0 -Werror
Confirmed kernel references
β
Detail
Exploit chain
none (Low severity)
Evidence (decisive lines)
Source-confirmed: evdev_open leaks allocated client on error paths (cdev.c:118-157)
Verified recommended fix
Source-confirmed: evdev_open leaks allocated client on error paths (cdev.c:118-157)
Verdict
Source-confirmed: evdev_open leaks allocated client on error paths (cdev.c:118-157)
No comments yet.