DF-1244 / fix.diff
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; } } |