← Back to CVE List
CVE-2026-90284NVD
Vulnerability 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.
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.
Affected & Patched Versions
- Linux Linux >= ecb739cf15a9bae040ce6b60209b78b92512d120 and < c8b97c5130f27b64fa2cfe1aa4bebb13f724c6c7
- Linux Linux >= 75d95e2e39b27f733f21e6668af1c9893a97de5e and < 93a2385730540105df8524447dcc11309ad280f9
- Linux Linux >= 75d95e2e39b27f733f21e6668af1c9893a97de5e and < ea33fac0df7fe7b49a4b27acb83e227b82317d1d
- Linux Linux >= 75d95e2e39b27f733f21e6668af1c9893a97de5e and < 5a250bff75a446374c05622973b18b4ab662b504
- Linux Linux >= 75d95e2e39b27f733f21e6668af1c9893a97de5e and < 85aeb8fc61839098ae0942ccba86e669c08e75d4
- Linux Linux >= 75d95e2e39b27f733f21e6668af1c9893a97de5e and < 6eaa632d0ed7bbb84f9cb670e5ec4e2cecf4cc7b
- Linux Linux >= 75d95e2e39b27f733f21e6668af1c9893a97de5e and < fb4824880b0dba0e7b3a497c46c642f979630392
- Linux Linux >= 75d95e2e39b27f733f21e6668af1c9893a97de5e and < b48373c901951fad1a26bd7c33ad91172b3945b5
- Linux Linux >= 67cf0fbcac0d42d4d4686cddc1e39f465bbfec37
- Linux Linux >= d09639528b66b5c7c20dc8f7fb8928aacabd40bb
- Linux Linux >= c14a54675db7131791402fa22fb0fa6da1f5fb66
- Linux Linux >= 5.10.58 and < 5.10.270
- Linux Linux >= 4.19.203 and < 4.20
- Linux Linux >= 5.4.140 and < 5.5
- Linux Linux >= 5.13.10 and < 5.14
- Linux Linux >= 5.14
- Linux Linux c8b97c5130f27b64fa2cfe1aa4bebb13f724c6c7
- Linux Linux 93a2385730540105df8524447dcc11309ad280f9
- Linux Linux ea33fac0df7fe7b49a4b27acb83e227b82317d1d
- Linux Linux 5a250bff75a446374c05622973b18b4ab662b504
- Linux Linux 85aeb8fc61839098ae0942ccba86e669c08e75d4
- Linux Linux 6eaa632d0ed7bbb84f9cb670e5ec4e2cecf4cc7b
- Linux Linux fb4824880b0dba0e7b3a497c46c642f979630392
- Linux Linux b48373c901951fad1a26bd7c33ad91172b3945b5
- Linux Linux 5.10.270
- Linux Linux 4.20
- Linux Linux 5.5
- Linux Linux 5.14
External References
- https://git.kernel.org/stable/c/c8b97c5130f27b64fa2cfe1aa4bebb13f724c6c7
- https://git.kernel.org/stable/c/93a2385730540105df8524447dcc11309ad280f9
- https://git.kernel.org/stable/c/ea33fac0df7fe7b49a4b27acb83e227b82317d1d
- https://git.kernel.org/stable/c/5a250bff75a446374c05622973b18b4ab662b504
- https://git.kernel.org/stable/c/85aeb8fc61839098ae0942ccba86e669c08e75d4
- https://git.kernel.org/stable/c/6eaa632d0ed7bbb84f9cb670e5ec4e2cecf4cc7b
- https://git.kernel.org/stable/c/fb4824880b0dba0e7b3a497c46c642f979630392
- https://git.kernel.org/stable/c/b48373c901951fad1a26bd7c33ad91172b3945b5