sched/irq: Avoid negative array index in irqchain_dispatch

IRQ_TO_NDX() may return a negative value when the IRQ number is invalid
or not mapped. Using this negative value directly as an array index for
g_irqvector causes undefined behavior and potential memory corruption.

This patch adds a bounds check to ensure ndx is non-negative before
accessing the g_irqvector array, returning the error code if invalid.

Signed-off-by: pangzhen1 <pangzhen1@xiaomi.com>
This commit is contained in:
pangzhen1
2025-09-02 20:56:00 +08:00
committed by Xiang Xiao
parent 5331d5a905
commit 927cccb278
+12 -5
View File
@@ -80,12 +80,19 @@ static int irqchain_dispatch(int irq, FAR void *context, FAR void *arg)
int ndx = IRQ_TO_NDX(irq);
int ret = 0;
curr = g_irqvector[ndx].arg;
while (curr != NULL)
if (ndx < 0)
{
prev = curr;
curr = curr->next;
ret |= prev->handler(irq, context, prev->arg);
ret = ndx;
}
else
{
curr = g_irqvector[ndx].arg;
while (curr != NULL)
{
prev = curr;
curr = curr->next;
ret |= prev->handler(irq, context, prev->arg);
}
}
return ret;