ZeroHour

CVE-2026-89466

niche

Unterminated firmware strings in Linux kernel qcom_battmgr cause OOB read

CVSS 3.1
7.7 high
EPSS
Published
()
Modified
AI analysis

The Qualcomm battery manager driver (qcom_battmgr) in the Linux kernel copies firmware-supplied model_number, serial_number, and oem_info strings without guaranteeing NUL termination, so when the battery-management firmware sends a string that fills the entire BATTMGR_STRING_LEN field, the later '%s' print in power_supply_format_property() reads past the destination buffer into the adjacent struct members. Any local, unprivileged user can trigger the over-read by reading the affected power_supply sysfs attributes, which can disclose neighboring kernel heap memory (confidentiality: high) or fault the kernel and cause a denial of service (availability: high), per the CVSS 7.7 vector. The flaw is in the SC8280XP firmware path of drivers/power/supply/qcom_battmgr.c, so only systems with the BATTERY_QCOM_BATTMGR driver enabled and Qualcomm battery-manager firmware present are affected — chiefly SC8280XP/SM8350-based ARM laptops and development boards (e.g., ThinkPad X13s-class hardware) running vulnerable kernels. Because the malicious input originates from the device's own battery-management firmware, practical exploitation requires hostile or corrupted firmware, and no public proof of concept or in-the-wild exploitation is known. The fix switches the copy to strscpy() so strings are always terminated, matching the existing SM8350 code path.

What to do: Upgrade to a kernel containing the qcom_battmgr strscpy() fix, following your distribution's kernel or stable-branch advisory for the backport. To gauge exposure, confirm whether a qcom_battmgr-backed power supply exists (e.g., /sys/class/power_supply battery exposing model_number, serial_number, or oem_info); most x86 servers, desktops, and non-Qualcomm-hardware systems are unaffected because the driver is absent or unbound. Treat anomalous or corrupted battery-management firmware with suspicion, since firmware-supplied strings are the input that drives the over-read.

Affected
Linux kernel (drivers/power/supply/qcom_battmgr.c, SC8280XP firmware-string path)All kernel releases shipping the qcom_battmgr driver prior to the strscpy() fix; no fixed version number is given in the record, so consult distro/kernel stable
Estimated exposure
nicheplausibly on the order of low tens of thousands of Linux devices at most (order of 10^4), possibly fewer — The vulnerable code only executes on Qualcomm SC8280XP/SM8350-based laptops and dev boards whose kernels enable and bind BATTERY_QCOM_BATTMGR, a small slice of ARM Linux deployments with no published device counts, so this is a qualitative…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: power: supply: qcom_battmgr: terminate the strings from firmware The qcom_battmgr_sc8280xp_strcpy() takes a Pascal-style string when the firmware sends one. Otherwise it copies all BATTMGR_STRING_LEN bytes and leaves the destination without a terminator. Those destinations are model_number, serial_number and oem_info, each BATTMGR_STRING_LEN and declared next to each other. They go out to user space as val->strval, which power_supply_format_property() prints with "%s", so a firmware string that fills the whole field makes that read run into the following members. Use strscpy() so the copy always terminates, the way the SM8350 path already does for the same field.

Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H

In the news

No ingested article mentions this CVE yet.