DragonFlyBSD Kernel Audit
DF-1885 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/raid/vinum/vinumrevive.c b/sys/dev/raid/vinum/vinumrevive.c
--- a/sys/dev/raid/vinum/vinumrevive.c
+++ b/sys/dev/raid/vinum/vinumrevive.c
@@ -514,7 +514,11 @@
 		plex->stripesize << DEV_BSHIFT);
 	else
 	    sd->init_blocksize = DEFAULT_REVIVE_BLOCKSIZE;
-    } else if (sd->init_blocksize > MAX_REVIVE_BLOCKSIZE)
+    } else if (sd->init_blocksize < DEV_BSIZE)
+	sd->init_blocksize = DEFAULT_REVIVE_BLOCKSIZE;
+    else if ((sd->init_blocksize & (DEV_BSIZE - 1)) != 0)
+	sd->init_blocksize = DEFAULT_REVIVE_BLOCKSIZE;
+    else if (sd->init_blocksize > MAX_REVIVE_BLOCKSIZE)
 	sd->init_blocksize = MAX_REVIVE_BLOCKSIZE;
 
     size = u64min(sd->init_blocksize >> DEV_BSHIFT, sd->sectors - sd->initialized) << DEV_BSHIFT;