⬢ DragonFlyBSD Kernel Audit
DF-2451 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/disk/dm/dm_pdev.c
+++ b/sys/dev/disk/dm/dm_pdev.c
@@ -103,6 +103,14 @@
 {
 	off_t noffset;
 
+	/*
+	 * If DIOCGPART failed at dm_pdev_insert() the partinfo is all
+	 * zero and media_blksize would divide by zero (panic in the dump
+	 * path).  Fall back to no geometry adjustment in that case.
+	 */
+	if (pdev->pdev_pinfo.media_blksize == 0)
+		return (offset);
+
 	noffset = pdev->pdev_pinfo.reserved_blocks +
 	    pdev->pdev_pinfo.media_offset / pdev->pdev_pinfo.media_blksize;
 	noffset *= DEV_BSIZE;