Re: [PATCH v2 01/22] alpha: enter hardirq context before looking up the irq descriptor
From: Magnus Lindholm <linmag7@gmail.com>
Date: 2026-09-06 08:54:14
Also in:
linux-doc, linux-hardening, lkml
Hi Matt, On Sat, Sep 5, 2026 at 9:29 PM Matt Turner [off-list ref] wrote:
quoted hunk ↗ jump to hunk
handle_irq() called irq_to_desc() before irq_enter(), so that lookup ran with the preempt count still saying task context and with RCU not yet watching. Generic code called from an interrupt handler should see hardirq context, and irq_to_desc() is more than an array index once SPARSE_IRQ is in use. Move irq_enter() to the top of the function and add the matching irq_exit() to the invalid interrupt path. Assisted-by: Claude:claude-opus-5 Signed-off-by: Matt Turner <mattst88@gmail.com> --- arch/alpha/kernel/irq.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)diff --git a/arch/alpha/kernel/irq.c b/arch/alpha/kernel/irq.c index 4a6a8b1d5a8b..5867a1655045 100644 --- a/arch/alpha/kernel/irq.c +++ b/arch/alpha/kernel/irq.c@@ -107,18 +107,21 @@ handle_irq(int irq) * handled by some other CPU. (or is disabled) */ static unsigned int illegal_count=0; - struct irq_desc *desc = irq_to_desc(irq); - + struct irq_desc *desc; + + irq_enter(); + + desc = irq_to_desc(irq); if (!desc || ((unsigned) irq > ACTUAL_NR_IRQS && illegal_count < MAX_ILLEGAL_IRQS)) { irq_err_count++; illegal_count++; printk(KERN_CRIT "device_interrupt: invalid interrupt %d\n", irq); + irq_exit(); return; } - irq_enter(); generic_handle_irq_desc(desc); irq_exit(); }
Since this patch is unchanged in v2, and we agreed to handle the hardirq-context consolidation as a follow-up, my tags from reviewing and testing the current change are: Tested-by: Magnus Lindholm <linmag7@gmail.com> Reviewed-by: Magnus Lindholm <linmag7@gmail.com> Regards, Magnus