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 | 1.0 KB | β raw |
| build.sh | build-script | N/A (source-only) | 65 B | view raw |
| run.sh | run-script | N/A (source-only) | 89 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 status (batch validation)
Applied with the 36 sibling fix.diffs of this batch in findings/poc/_batch41/all_fixes.patch; single in-guest make -j6 nativekernel KERNCONF=X86_64_GENERIC completed RC=0 with zero errors under -Werror (full log: findings/poc/_batch41/fix_build8.log). Behavior A/B intentionally skipped for this Info-tier item.
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.