cris: irq: stop loop from accessing array out of bounds
authorNiklas Cassel <nks@flawful.org>
Thu, 22 Sep 2016 14:21:13 +0000 (16:21 +0200)
committerJesper Nilsson <jespern@axis.com>
Thu, 22 Sep 2016 14:26:29 +0000 (16:26 +0200)
array "interrupt" only has 32 or 64 elements, depending on machine.

arch/cris/arch-v32/kernel/irq.c: In function ‘init_IRQ’:
arch/cris/arch-v32/kernel/irq.c:475:3: warning: iteration 32u invokes undefined behavior [-Waggressive-loop-optimizations]
   set_exception_vector(i, interrupt[j]);
   ^
arch/cris/arch-v32/kernel/irq.c:474:2: note: containing loop
  for (i = FIRST_IRQ, j = 0; j < NBR_INTR_VECT; i++, j++) {
  ^

Signed-off-by: Niklas Cassel <nks@flawful.org>
Signed-off-by: Jesper Nilsson <jespern@axis.com>
arch/cris/arch-v32/kernel/irq.c

index 6de8db6..b07da4b 100644 (file)
@@ -471,9 +471,8 @@ init_IRQ(void)
        irq_set_default_host(domain);
        of_node_put(np);
 
-       for (i = FIRST_IRQ, j = 0; j < NBR_INTR_VECT; i++, j++) {
+       for (i = FIRST_IRQ, j = 0; j < NBR_INTR_VECT && j < MACH_IRQS; i++, j++)
                set_exception_vector(i, interrupt[j]);
-       }
 
        /* Mark Timer and IPI IRQs as CPU local */
        irq_allocations[TIMER0_INTR_VECT - FIRST_IRQ].cpu = CPU_FIXED;