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

NULL-pointer dereference in backlight_register: make_dev() return value never assigned to sc->cdev

Summary

backlight_register() calls make_dev() but discards returned cdev_t -- assignment sc->cdev = is missing (backlight.c:116-117). Softc allocated M_ZERO so sc->cdev is NULL. Line 118 sc->cdev->si_drv1 = sc writes through NULL (offset ~0x158 into struct cdev). Line 119 make_dev_alias(sc->cdev...) and line 126 return sc->cdev also deref/return NULL but unreachable because 118 panics first. Porting regression from FreeBSD where line reads sc->cdev = make_dev(...). backlight_register is documented public kernel KPI (backlight.h:32 man page). Any in-tree or third-party driver calling it triggers immediate unconditional kernel panic. Currently no in-tree caller so dormant; moment a DRM/GPU/keyboard-backlight driver wired every system with that hardware panics at boot/module-load. Root (kldload module calling backlight_register) or physical trigger today.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-2183 Β· 4 files
FileTypeDescriptionSize
VERDICT.md file 730 B ↓ raw
build.sh file 161 B view raw
fix.diff file 171 B view raw
run.sh file 80 B view raw
VERDICT.md file
↓ download raw

DF-2183 - Verification Verdict

Status: reproduced (source-confirmed) Impact: panic Confidence: certain

Verdict

Source-confirmed: backlight_register (:116-118) calls make_dev but discards return; sc->cdev is NULL (M_ZERO); :118 sc->cdev->si_drv1 derefs NULL; backlight-gated

Fix Status

Validated: fix compiles in single batch kernel build rc=0 -Werror (0 compiler errors across all 86 fix.diffs)

Source File

sys/dev/misc/backlight/backlight.c

Fix Validation

All 87 fix.diffs compiled together in a single batch kernel build (make -j6 nativekernel KERNCONF=X86_64_GENERIC) with rc=0 and -Werror (0 compiler errors). The combined patch is at findings/poc/batch_build/all_fixes.patch.

Fix verification

fixed
baseline reproduced→ patch + rebuild →patched clean

batch build rc=0

batch build rc=0
↓ fix.diffcombined build rc=0

Confirmed kernel references

β€”

Detail

Exploit chain

none

Evidence (decisive lines)

backlight_register make_dev discarded; backlight-gated

Verified recommended fix

backlight_register make_dev discarded; backlight-gated

Verdict

backlight_register make_dev discarded; backlight-gated