Medium · published March 25, 2026
In the Linux kernel, the following vulnerability has been resolved:
can: mcp251x: fix deadlock in error path of mcp251x_open
The mcp251x_open() function call free_irq() in its error path with the
mpc_lock mutex held. But if an interrupt already occurred the
interrupt handler will be waiting for the mpc_lock and free_irq() will
deadlock waiting for the handler to finish.
This issue is similar to the one fixed in commit 7dd9c26bd6cf ("can:
mcp251x: fix deadlock if an interrupt occurs during mcp251x_open") but
for the error path.
To solve this issue move the call to free_irq() after the lock is
released. Setting `priv->force_quit = 1` beforehand ensure that the IRQ
handler will exit right away once it acquired the lock.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 2.6.34.1, < 5.10.253 | 5.10.253 |
| linux/linux_kernel | ≥ 5.11, < 5.15.203 | 5.15.203 |
| linux/linux_kernel | ≥ 5.16, < 6.1.167 | 6.1.167 |
| linux/linux_kernel | ≥ 6.2, < 6.6.130 | 6.6.130 |
| linux/linux_kernel | ≥ 6.7, < 6.12.77 | 6.12.77 |
| linux/linux_kernel | ≥ 6.13, < 6.18.17 | 6.18.17 |
| linux/linux_kernel | ≥ 6.19, < 6.19.7 | 6.19.7 |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |