β¬’ DragonFlyBSD Kernel Audit
← triage Β· dashboard
DF-1631

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)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-1631 Β· 4 files
FileTypeDescriptionSize
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
VERDICT.md verdict source-confirmation analysis
↓ download 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

fixed
baseline reproduced→ patch + rebuild →patched clean

fix.diff compiled in batch kernel build rc=0 -Werror

fix.diff compiled in batch kernel build rc=0 -Werror
↓ fix.diffcombined build rc=0

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)