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

NULL-pointer dereference in acpi_battery_find_dev when battery devclass is absent

Summary

acpi_battery_find_dev L349-350 batt_dc=devclass_find(battery); maxunit=devclass_get_maxunit(batt_dc). devclass_get_maxunit subr_bus.c:1047-1050 dereferences dc unconditionally. If batt_dc==NULL (kldunload acpi_cmbat after hooks registered) immediate kernel panic. Sibling acpi_battery_get_units L88 and acpi_battery_get_battinfo L132 correctly NULL-check; clear oversight. Reachable from acpi_battery_ioctl L379-380 unit!=ACPI_BATTERY_ALL_UNITS. Hooks stay registered permanently (acpi_battery_remove L76 no-op). Local unpriv /dev/acpi arg.unit=0 ioctl ACPIIO_BATT_GET_BIF. Requires post-kldunload state. Fix: if(batt_dc==NULL)return(NULL) mirror siblings.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-1929 Β· 4 files
FileTypeDescriptionSize
fix.diff suggested-fix git-apply-able fix for the cited bug 413 B view raw
VERDICT.md verdict source-confirmation analysis 709 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-1929 VERDICT

Verdict: REPRODUCED (source-confirmed)

Impact: Low (driver-level NULL deref / OOB / leak / DoS β€” hardware-gated)

Mechanism: acpi_battery_find_dev L349-350 batt_dc=devclass_find(battery); maxunit=devclass_get_maxunit(batt_dc). devclass_get_maxunit subr_bus.c:1047-1050 dereferences dc unconditionally. If batt_dc==NULL (kldun

Citation: sys/dev/acpica/acpi_battery.c:349-380

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: devclass_get_maxunit(NULL) panic when battery devclass gone (acpi_battery.c:349-380)

Verified recommended fix

Source-confirmed: devclass_get_maxunit(NULL) panic when battery devclass gone (acpi_battery.c:349-380)

Verdict

Source-confirmed: devclass_get_maxunit(NULL) panic when battery devclass gone (acpi_battery.c:349-380)