All vulnerabilities
CVE-2026-99050

Linux: gpio: mpsse: fix race when arming the IRQ poll worker

Linux LinuxOperating systems
CVSS
NoneNot scored
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)No scoreNo FIRST EPSS score in this snapshot yet
Fixed in76390ac0bca7e5058b7482eb4d951c3bda5df812Also 7efa1a1953cd6b20b23a3524d5b4b81789c6ef25, 6.18.57CVE List
Published23 Oct 2026Updated 23 Oct 2026CVE List

What fixes it

  • 76390ac0bca7e5058b7482eb4d951c3bda5df812LinuxCVE List
  • 7efa1a1953cd6b20b23a3524d5b4b81789c6ef25LinuxCVE List
  • 6.18.57LinuxCVE List

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

In the Linux kernel, the following vulnerability has been resolved:

gpio: mpsse: fix race when arming the IRQ poll worker

gpio_mpsse_irq_enable() arms the poll worker before publishing it: schedule_work() runs before the worker is added to priv->workers. If gpio_mpsse_disconnect() walks the list in that window it misses the worker, and once disconnect returns, the USB core frees mpsse_priv while the orphaned gpio_mpsse_poll() work keeps accessing it, causing a use-after-free.

Fix this by publishing and arming the worker in one irq_spin critical section. Teardown walks the same list under irq_spin, so a worker found on the list is guaranteed to be armed, and cancel_work_sync() handles it whether it is queued or running.

A worker armed after the disconnect walk would still be missed, so also set a new priv->dying flag under irq_spin before the teardown walk, and check it in the same critical section, freeing it via kfree_rcu() instead when the device is going away, since kfree() would be called with the IRQ core's raw spinlock held and may sleep on PREEMPT_RT. schedule_work() is safe to call with irq_spin held, and the next probe gets a fresh mpsse_priv, so the flag never needs to be cleared.

This issue was found by an in-house static analysis tool.

Text from CVE List

Affected versions 9

  • Linuxaffected: 472d900c8bcac301ae0e40fdca7db799bd989ff5 before 76390ac0bca7e5058b7482eb4d951c3bda5df812CVE List
  • Linuxaffected: 179ef1127d7a4f09f0e741fa9f30b8a8e7886271 before c0071ee496e1228976c72b096f529503222708a0CVE List
  • Linuxaffected: 179ef1127d7a4f09f0e741fa9f30b8a8e7886271 before 7efa1a1953cd6b20b23a3524d5b4b81789c6ef25CVE List
  • Linuxaffected: 6.18.6 before 6.18.57CVE List
  • Linuxaffected: 6.19CVE List
  • Linuxunaffected: all versions before 6.19CVE List
  • Linuxunaffected: 6.18.57 through 6.18.*CVE List
  • Linuxunaffected: 7.2.11 through 7.2.*CVE List
  • Linuxunaffected: 7.3CVE List

References 3