CVE-2026-23287
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
25/03/2026
Last modified:
25/03/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
irqchip/sifive-plic: Fix frozen interrupt due to affinity setting<br />
<br />
PLIC ignores interrupt completion message for disabled interrupt, explained<br />
by the specification:<br />
<br />
The PLIC signals it has completed executing an interrupt handler by<br />
writing the interrupt ID it received from the claim to the<br />
claim/complete register. The PLIC does not check whether the completion<br />
ID is the same as the last claim ID for that target. If the completion<br />
ID does not match an interrupt source that is currently enabled for<br />
the target, the completion is silently ignored.<br />
<br />
This caused problems in the past, because an interrupt can be disabled<br />
while still being handled and plic_irq_eoi() had no effect. That was fixed<br />
by checking if the interrupt is disabled, and if so enable it, before<br />
sending the completion message. That check is done with irqd_irq_disabled().<br />
<br />
However, that is not sufficient because the enable bit for the handling<br />
hart can be zero despite irqd_irq_disabled(d) being false. This can happen<br />
when affinity setting is changed while a hart is still handling the<br />
interrupt.<br />
<br />
This problem is easily reproducible by dumping a large file to uart (which<br />
generates lots of interrupts) and at the same time keep changing the uart<br />
interrupt&#39;s affinity setting. The uart port becomes frozen almost<br />
instantaneously.<br />
<br />
Fix this by checking PLIC&#39;s enable bit instead of irqd_irq_disabled().
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/1072020685f4b81f6efad3b412cdae0bd62bb043
- https://git.kernel.org/stable/c/1883332bf21feb8871af09daf604fc4836a76925
- https://git.kernel.org/stable/c/2edbd173309165d103be6c73bd83e459dc45ae7b
- https://git.kernel.org/stable/c/686eb378a4a51aa967e08337dd59daade16aec0f
- https://git.kernel.org/stable/c/8942fb1a5bc2dcbd88f7e656d109d42f778f298f
- https://git.kernel.org/stable/c/f611791a927141d05d7030607dea6372311c1413



