diff --git a/sys/bus/mmc/mmc.c b/sys/bus/mmc/mmc.c --- a/sys/bus/mmc/mmc.c +++ b/sys/bus/mmc/mmc.c @@ -1105,9 +1105,11 @@ csd->r2w_factor = 1 << mmc_get_bits(raw_csd, 128, 26, 3); csd->write_bl_len = 1 << mmc_get_bits(raw_csd, 128, 22, 4); csd->write_bl_partial = mmc_get_bits(raw_csd, 128, 21, 1); - } else - panic("unknown SD CSD version"); -} + } else { + kprintf("mmc: unknown SD CSD structure version %d, ignoring card\n", v); + /* Do not panic: a crafted/corrupt card fully controls these bits. + Leave csd zeroed so the caller rejects the card instead. */ + } static void mmc_decode_csd_mmc(uint32_t *raw_csd, struct mmc_csd *csd)