DragonFlyBSD Kernel Audit
DF-1646 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/raid/vinum/vinumrequest.c b/sys/dev/raid/vinum/vinumrequest.c
--- a/sys/dev/raid/vinum/vinumrequest.c
+++ b/sys/dev/raid/vinum/vinumrequest.c
@@ -491,8 +491,10 @@
 	sd = NULL;					    /* (keep compiler quiet) */
 	for (sdno = 0; sdno < plex->subdisks; sdno++) {
 	    sd = &SD[plex->sdnos[sdno]];
-	    if (*diskaddr < sd->plexoffset)		    /* we must have a hole, */
+	    if (*diskaddr < sd->plexoffset) {		    /* we must have a hole, */
 		status = REQUEST_DEGRADED;		    /* note the fact */
+		continue;					    /* skip past the hole */
+	    }
 	    if (*diskaddr < (sd->plexoffset + sd->sectors)) { /* the request starts in this subdisk */
 		rqg = allocrqg(rq, 1);			    /* space for the request */
 		if (rqg == NULL) {			    /* malloc failed */