β¬’ 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 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
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 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

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)