Skip to main content
← All vulnerabilities
CVE-2026-90284

firmware_loader: do not queue completed sysfs fallback requests

Published
Last modified
published
Not listed in CISA KEV
Fix
Fixed in 5.10.270, 4.20, 5.5, 5.14, 5.15.221, and 5 more
None on Exploit-DB, Metasploit or GitHub

Summary

In the Linux kernel, the following vulnerability has been resolved: firmware_loader: do not queue completed sysfs fallback requests fw_load_sysfs_fallback() calls device_add() before adding the fw_priv to pending_fw_head. device_add() publishes the fallback loading interface, so a userspace helper which discovers the device by scanning sysfs can write 0 to the loading attribute and complete the request before it is queued as pending. In that interleaving firmware_loading_store() calls fw_state_done() while pending_list still points to itself, so it cannot remove an entry from pending_fw_head. The subsequent unconditional list_add() then queues an already-completed fw_priv. Once the request is released, pending_fw_head can retain a pointer to freed memory and the next fallback request can fault while validating the list. Only in-flight fallback requests need suspend or reboot abort handling. If the request is already DONE after device_add(), return success from the fallback path without sending another uevent, waiting again, or queueing it as pending. This preserves the invariant that pending_fw_head contains only active fallback requests.

Timeline

  1. CVE published
  2. Record last updated

Affected versions

  • Linux Linux

    From ecb739cf15a9bae040ce6b60209b78b92512d120 · fixed in c8b97c5130f27b64fa2cfe1aa4bebb13f724c6c7; From 75d95e2e39b27f733f21e6668af1c9893a97de5e · fixed in 93a2385730540105df8524447dcc11309ad280f9; From 75d95e2e39b27f733f21e6668af1c9893a97de5e · fixed in ea33fac0df7fe7b49a4b27acb83e227b82317d1d; From 75d95e2e39b27f733f21e6668af1c9893a97de5e · fixed in 5a250bff75a446374c05622973b18b4ab662b504; From 75d95e2e39b27f733f21e6668af1c9893a97de5e · fixed in 85aeb8fc61839098ae0942ccba86e669c08e75d4; From 75d95e2e39b27f733f21e6668af1c9893a97de5e · fixed in 6eaa632d0ed7bbb84f9cb670e5ec4e2cecf4cc7b; From 75d95e2e39b27f733f21e6668af1c9893a97de5e · fixed in fb4824880b0dba0e7b3a497c46c642f979630392; From 75d95e2e39b27f733f21e6668af1c9893a97de5e · fixed in b48373c901951fad1a26bd7c33ad91172b3945b5; From 5.10.58 · fixed in 5.10.270; From 4.19.203 · fixed in 4.20; From 5.4.140 · fixed in 5.5; From 5.13.10 · fixed in 5.14

  • Linux Linux

    5.14

  • KernelLinux

    fixed in 5.10.270; From 5.11.0 · fixed in 5.15.221; From 5.14.0 · fixed in 6.1.188; From 5.16.0 · fixed in 6.6.157; From 6.2.0 · fixed in 6.12.110; From 6.7.0 · fixed in 6.18.52; From 6.13.0 · fixed in 7.2.6

References 8

git.kernel.org