◆ CVE Hub

CVE-2026-99050

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

Published
2026-10-23
Last modified
2026-10-24
CNA
Linux
NVD status
Received

Fetching some sources has been requested. Reload in about a minute to see them.

CVSS v3.1 (listed by NVD)
7.8
HIGH
Scored by Linux (not yet scored by NVD)
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0 (listed by NVD)
—
Not scored
CVSS (listed by CVE.org)
7.8
HIGH
Scored by CNA (Linux) · v3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
EPSS exploit probability
0.2%
Percentile 10.2%
as of 2026-10-24
CISA KEV
—
Not listed

Attack conditions and impact

Derived from the CNA (via NVD) CVSS 3.1 vector
LocalLoginNo interaction Confidentiality HIntegrity HAvailability H
MetricValueMeaning
Attack vector AVLLocal
Attack complexity ACLLow (easy)
Privileges required PRLRegular user
User interaction UINNone
Scope SUUnchanged
Confidentiality CHHigh
Integrity IHHigh
Availability AHHigh
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Description

NVD

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

ProviderVersionScoreVector
NVD / 416baaa9-dc9f-4396-8d5f-8c081fb06d67 (Secondary)3.17.8 HIGHCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CNA / Linux3.17.8 HIGHCVSS: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)

VendorProductVersions
LinuxLinux
affected: 472d900c8bcac301ae0e40fdca7db799bd989ff5 … < 76390ac0bca7e5058b7482eb4d951c3bda5df812
affected: 179ef1127d7a4f09f0e741fa9f30b8a8e7886271 … < c0071ee496e1228976c72b096f529503222708a0
affected: 179ef1127d7a4f09f0e741fa9f30b8a8e7886271 … < 7efa1a1953cd6b20b23a3524d5b4b81789c6ef25
affected: 6.18.6 … < 6.18.57
default: unaffected
LinuxLinux
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

EcosystemPackageAffected versionsFixed 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
LinuxKernel< 6.18.57; >= 6.19.0, < 7.2.116.18.57, 7.2.11

Linux distribution status

Red Hat ↗ Fetching

Debian ↗

ReleasePackageStatusFixed version / notes
bookwormlinuxnot-affected unimportant
forkylinuxresolved not yet assigned7.2.11-1
sidlinuxresolved not yet assigned7.2.11-1
trixielinuxnot-affected unimportant

Ubuntu ↗ Fetching

References (6)