CVE-2026-99050
gpio: mpsse: fix race when arming the IRQ poll worker
Fetching some sources has been requested. Reload in about a minute to see them.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Attack conditions and impact
Derived from the CNA (via NVD) CVSS 3.1 vector| Metric | Value | Meaning |
|---|---|---|
| Attack vector AV | L | Local |
| Attack complexity AC | L | Low (easy) |
| Privileges required PR | L | Regular user |
| User interaction UI | N | None |
| Scope S | U | Unchanged |
| Confidentiality C | H | High |
| Integrity I | H | High |
| Availability A | H | High |
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
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.
CVSS assessments
| Provider | Version | Score | Vector |
|---|---|---|---|
| NVD / 416baaa9-dc9f-4396-8d5f-8c081fb06d67 (Secondary) | 3.1 | 7.8 HIGH | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CNA / Linux | 3.1 | 7.8 HIGH | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
Affected products and packages
CNA (CVE.org)
| Vendor | Product | Versions |
|---|---|---|
| Linux | Linux | affected: 472d900c8bcac301ae0e40fdca7db799bd989ff5 … < 76390ac0bca7e5058b7482eb4d951c3bda5df812 affected: 179ef1127d7a4f09f0e741fa9f30b8a8e7886271 … < c0071ee496e1228976c72b096f529503222708a0 affected: 179ef1127d7a4f09f0e741fa9f30b8a8e7886271 … < 7efa1a1953cd6b20b23a3524d5b4b81789c6ef25 affected: 6.18.6 … < 6.18.57 default: unaffected |
| Linux | Linux | affected: 6.19 unaffected: 0 … < 6.19 unaffected: 6.18.57 … <= 6.18.* unaffected: 7.2.11 … <= 7.2.* unaffected: 7.3 … <= * default: affected |
Open-source packages (GitHub Advisory / OSV)
gpio: mpsse: fix race when arming the IRQ poll worker
| Ecosystem | Package | Affected versions | Fixed in |
|---|---|---|---|
| >= 472d900c8bcac301ae0e40fdca7db799bd989ff5, < 76390ac0bca7e5058b7482eb4d951c3bda5df812; >= 179ef1127d7a4f09f0e741fa9f30b8a8e7886271, < c0071ee496e1228976c72b096f529503222708a0; < 7efa1a1953cd6b20b23a3524d5b4b81789c6ef25; >= 6.18.6, < 6.18.57 v6.18.56, v6.18.55, v6.18.54, v6.18.53, v6.18.52, v6.18.51, v6.18.50, v6.18.49, v6.18.48, v6.18.47, v6.18.46, v6.18.45, v6.18.44, v6.18.43, v6.18.42, v6.18.41, v6.18.40, v6.18.39, v6.18.38, v6.18.37, … (+31) | 76390ac0bca7e5058b7482eb4d951c3bda5df812, c0071ee496e1228976c72b096f529503222708a0, 7efa1a1953cd6b20b23a3524d5b4b81789c6ef25, 6.18.57 | ||
| Linux | Kernel | < 6.18.57; >= 6.19.0, < 7.2.11 | 6.18.57, 7.2.11 |
Linux distribution status
References (6)
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git OSV
- https://git.kernel.org/stable/c/76390ac0bca7e5058b7482eb4d951c3bda5df812 NVD, CNA, OSV
- https://git.kernel.org/stable/c/7efa1a1953cd6b20b23a3524d5b4b81789c6ef25 NVD, CNA, OSV
- https://git.kernel.org/stable/c/c0071ee496e1228976c72b096f529503222708a0 NVD, CNA, OSV
- https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/99xxx/CVE-2026-99050.json OSV
- https://nvd.nist.gov/vuln/detail/CVE-2026-99050 OSV