cve.bz

CVE-2026-19809 Kernel stack information disclosure in the charger_get_prop() system call handler

3.3 lowEPSS 0.1%

Low (3.3) in zephyrproject zephyr. EPSS 0.1% estimated probability of exploitation activity in the next 30 days.

On this page
The user-mode system call verifier z_vrfy_charger_get_prop() in drivers/charger/charger_handlers.c declares an uninitialized union charger_propval k_val on the kernel (privileged) stack, passes it to the charger driver back end via z_impl_charger_get_prop(), and then copies the full sizeof(union charger_propval) back into the calling user thread's buffer with k_usermode_to_copy(). That discloses kernel stack contents on two paths: On error. The copy-out ignores the driver's return code. In-tree back ends return an error without writing through the value pointer for properties they do not implement: charger_gpio_get_prop() returns -ENOTSUP unconditionally, and bq24190_get_prop() has a default: return -ENOTSUP; arm that never touches val. The whole union is then stack residue. On success. A back end writes only the one union member the requested property selects (for example sbs_charger.c writes the one-byte val->present for CHARGER_PROP_PRESENT and returns 0), yet the handler still copies the whole union, so every byte beyond that member is uninitialized. The handler is compiled only when CONFIG_USERSPACE=y and is reachable by any user-mode thread that has been granted access to a charger device object. K_SYSCALL_DRIVER_CHARGER() validates only the device object and its API pointer, not the property identifier, so an unprivileged thread can choose prop freely: an unimplemented property forces the error path, a narrow one the success path, and the call can be repeated at will. Each call discloses up to the size of the union (12 bytes on a 32-bit target, 16 bytes on 64-bit targets where the function-pointer members widen it) of supervisor-stack memory. The bytes are residue of earlier kernel-side frames on the thread's privileged stack and can contain kernel object addresses and saved return addresses, which an unprivileged thread cannot otherwise observe and which help defeat address-layout assumptions when exploiting a separate memory-safety defect. There is no integrity or availability impact. Two commits fix it, and both are needed. 5054384e983c skips the copy-out when the back end reports an error. c31cac727d02 zeroes the union before the driver call, so the bytes copied out on success are driver-written data or zeros. A tree carrying only the first still leaks on every successful call.

Severity

CVSS 3.1

3.3 low
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
EPSS
0.1% estimated probability of exploitation activity in the next 30 days; 1st percentile. Scored 2026-11-13. A forecast for this CVE across the internet, not for your own systems.
CWEs
CWE-252 Unchecked Return Value
CWE-908 Use of Uninitialized Resource
OWASP Top 10
A10:2025 Mishandling of Exceptional Conditions
Published
Modified
Assigned by
zephyr (CNA)
NVD analysis
Awaiting analysis
Record from
the NVD, synced

Ask an AI about this CVE

Show the promptExplain CVE-2026-19809 for an engineer deciding whether to act. Use https://cve.bz/api/public/cves/CVE-2026-19809?via=ask-ai-copy and https://cve.bz/cve/CVE-2026-19809?via=ask-ai-copy as the source of truth: what is affected and which versions fix it, whether it is in CISA KEV, public exploits, and its EPSS (an internet-wide 30-day estimate of exploitation activity, not a forecast for my systems). If they give no fixed versions, use the CVE record https://cveawg.mitre.org/api/cve/CVE-2026-19809 or the vendor advisory, not third-party mirrors. Tell me how to check whether I am affected and how to verify a fix. Cite the sources and say where they are uncertain.

Opens a third-party assistant; its answer is its own, not cve.bz's. The prompt holds only this CVE's id and public links.

Badge for a README or a site

CVE-2026-19809

An image that stays current: it is drawn from the data each time it is fetched (a host that proxies images, as GitHub does, may show its copy for a while). Markdown:

[![CVE-2026-19809](https://cve.bz/cve/badge/CVE-2026-19809.svg)](https://cve.bz/cve/CVE-2026-19809)

HTML:

<a href="https://cve.bz/cve/CVE-2026-19809"><img src="https://cve.bz/cve/badge/CVE-2026-19809.svg" alt="CVE-2026-19809"></a>

Affected

Versions

From the CNA's record in the CVE List.

ProductAffected
zephyrproject zephyrfrom 3.5.0 before 4.3.2
zephyrproject zephyrfrom 4.4.0 before 4.5.0

References

Check your stackJSON