CVE Catalog

CVE-2026-99050

HighCVSS 7.8
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.21%

10th percentile - higher than 10% of all known CVEs

Summary

In the Linux kernel's gpio-mpsse driver, gpio_mpsse_irq_enable() armed the poll worker before adding it to priv->workers. If gpio_mpsse_disconnect() walked the list in that window, it missed the worker, and after mpsse_priv was freed the orphaned gpio_mpsse_poll() kept accessing it, causing a use-after-free. The fix publishes and arms the worker in one irq_spin critical section and adds a priv->dying flag.

Risk Assessment

The race can lead to a use-after-free during USB GPIO device disconnect, potentially causing kernel crashes or exploitation. Devices handled by gpio-mpsse are affected.

Recommendation

Update the Linux kernel to a version with the fix synchronizing IRQ worker arming in gpio-mpsse. Avoid disconnecting such devices during active use until the update is deployed.

Other vulnerabilities in Linux kernel

See all
Original NVD description (English source)

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.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS