--- a/sys/dev/raid/iir/iir.c +++ b/sys/dev/raid/iir/iir.c @@ -1577,6 +1577,13 @@ return; } + if (ctx.istatus < 2 || ctx.istatus > GDT_MAXCMDS + 1) { + kprintf("iir%d: invalid command index %d from controller\n", + gdt->sc_hanum, ctx.istatus); + if (!(gdt->sc_state & GDT_POLLING)) + crit_exit(); + return; + } gccb = &gdt->sc_gccbs[ctx.istatus - 2]; ctx.service = gccb->gc_service;