diff options
author | fjoe <fjoe@FreeBSD.org> | 2005-09-29 22:45:16 +0000 |
---|---|---|
committer | fjoe <fjoe@FreeBSD.org> | 2005-09-29 22:45:16 +0000 |
commit | 20962cb412a5ff8a2e1a5236a5d312a18d91c2c1 (patch) | |
tree | 3714c1106a9aa3d354144a9cf6f049a246b9bea3 /sys/geom/uzip | |
parent | 5c713a5737d458b17c6402f9b8e02a6ae55115fe (diff) | |
download | FreeBSD-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.c | 7 |
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)); } |