DragonFlyBSD Kernel Audit
DF-1244 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/raid/mrsas/mrsas.c b/sys/dev/raid/mrsas/mrsas.c
--- a/sys/dev/raid/mrsas/mrsas.c
+++ b/sys/dev/raid/mrsas/mrsas.c
@@ -3383,6 +3383,11 @@
         for (ld_index = 0; ld_index < ld_list_mem->ldCount; ld_index++) {
             if (ld_list_mem->ldList[ld_index].state != 0) {
                 ids = ld_list_mem->ldList[ld_index].ref.ld_context.targetId;
+                if (ids >= MRSAS_MAX_LD) {
+                    device_printf(sc->mrsas_dev, "FW returned LD targetId %u "
+                        "out of range (max %d), skipping\n", ids, MRSAS_MAX_LD);
+                    continue;
+                }
                 sc->ld_ids[ids] = ld_list_mem->ldList[ld_index].ref.ld_context.targetId;
             }
         }