CVE-2026-81015
massLPS0 registration leak in Linux amd_pmc driver causes list corruption and UAF
The AMD PMC driver (platform/x86/amd/pmc) in the Linux kernel leaks its ACPI LPS0 s2idle registration and debugfs directory when its final probe step, amd_stb_s2d_init(), fails, because the error path only releases the PCI device reference. The stale handler remains on the global lps0_s2idle_devops_head list after the devm-managed resources backing it are torn down, so reloading the module triggers a list_add corruption kernel BUG, and even without a reload the next suspend-to-idle transition calls into freed driver state — a use-after-free that can crash or corrupt the kernel. Affected systems are x86 machines with AMD power-management hardware (typically modern AMD Ryzen laptops and desktops running Linux) where the S2D telemetry setup can fail, for example an ioremap failure on a long-running system or the SMU rejecting the S2D setup. With a CVSS of 7.8 on a local attack vector requiring only low privileges, exploitation depends on local access or naturally occurring STB-init failures rather than network exposure, and no public PoC or in-the-wild exploitation is known.
What to do: Update to a kernel release that includes this fix (the amd_stb_s2d_init() error path now unregisters the LPS0 handler and removes the debugfs directory) as soon as your distribution ships it; no fixed version number is specified in this data. Until patched, avoid unloading and reloading amd_pmc, and reboot any system that logs an amd_pmc probe failure (SMU/S2D telemetry errors in dmesg) before its next suspend-to-idle cycle. Since the flaw is local-only, keep untrusted local accounts and unprivileged module-loading paths locked down.
| Linux (kernel.org) Linux kernel, platform/x86/amd/pmc (AMD PMC driver) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: platform/x86/amd/pmc: Fix LPS0 and debugfs leaks when STB init fails amd_pmc_probe() registers the LPS0 s2idle handler with acpi_register_lps0_dev() and creates the driver's debugfs directory before calling amd_stb_s2d_init(), which is the last step in probe that can fail. When amd_stb_s2d_init() fails (for example the S2D telemetry region cannot be ioremapped on a long-running system, or the SMU rejects the S2D setup) the error path only calls pci_dev_put() and returns. This leaves amd_pmc_s2idle_dev_ops on the global lps0_s2idle_devops_head list and leaks the debugfs directory, while the devm-managed resources backing the handler are torn down. Reloading the module then walks the corrupted list in acpi_register_lps0_dev() and hits: list_add corruption. next->prev should be prev, but was NULL. kernel BUG at lib/list_debug.c:29! acpi_register_lps0_dev+0x44/0x80 amd_pmc_probe+0x224/0x380 [amd_pmc] platform_probe+0x67/0x90 Even without a reload, the stale registration means the next s2idle transition calls into torn-down driver state. Unwind the debugfs directory and the LPS0 registration on the amd_stb_s2d_init() error path. acpi_unregister_lps0_dev() is safe to call unconditionally here: it is guarded on the same conditions as acpi_register_lps0_dev(), which is exactly what amd_pmc_remove() already relies on.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.