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