⬢ DragonFlyBSD Kernel Audit
DF-4172 / fix.diff
← back to finding ↓ download raw
--- 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;