summaryrefslogtreecommitdiffstats
path: root/sys/geom/uzip
diff options
context:
space:
mode:
authorfjoe <fjoe@FreeBSD.org>2005-09-29 22:45:16 +0000
committerfjoe <fjoe@FreeBSD.org>2005-09-29 22:45:16 +0000
commit20962cb412a5ff8a2e1a5236a5d312a18d91c2c1 (patch)
tree3714c1106a9aa3d354144a9cf6f049a246b9bea3 /sys/geom/uzip
parent5c713a5737d458b17c6402f9b8e02a6ae55115fe (diff)
downloadFreeBSD-src-20962cb412a5ff8a2e1a5236a5d312a18d91c2c1.zip
FreeBSD-src-20962cb412a5ff8a2e1a5236a5d312a18d91c2c1.tar.gz
- Fix "end_blk out of range" panic when INVARIANTS.
- Do not allow rw access. Submitted by: Dario Freni <saturnero at freesbie dot org> MFC after: 3 days
Diffstat (limited to 'sys/geom/uzip')
-rw-r--r--sys/geom/uzip/g_uzip.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/geom/uzip/g_uzip.c b/sys/geom/uzip/g_uzip.c
index 98321e8..ae37353d 100644
--- a/sys/geom/uzip/g_uzip.c
+++ b/sys/geom/uzip/g_uzip.c
@@ -238,9 +238,9 @@ g_uzip_start(struct bio *bp)
start_blk = bp->bio_offset / sc->blksz;
end_blk = (bp->bio_offset + bp->bio_length + sc->blksz - 1) / sc->blksz;
- KASSERT(start_blk <= sc->nblocks,
+ KASSERT(start_blk < sc->nblocks,
("start_blk out of range"));
- KASSERT(end_blk < sc->nblocks,
+ KASSERT(end_blk <= sc->nblocks,
("end_blk out of range"));
sc->req_total++;
@@ -321,6 +321,9 @@ g_uzip_access(struct g_provider *pp, int dr, int dw, int de)
cp = LIST_FIRST(&gp->consumer);
KASSERT (cp != NULL, ("g_uzip_access but no consumer"));
+ if (cp->acw + dw > 0)
+ return EROFS;
+
return (g_access(cp, dr, dw, de));
}
OpenPOWER on IntegriCloud