summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_io.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-12-18 19:53:59 +0000
committerphk <phk@FreeBSD.org>2002-12-18 19:53:59 +0000
commit4052863334f88b834ae48faa0160fd6fdd753299 (patch)
treea920c24bfb11e6964a9d1107f976987838a681e1 /sys/geom/geom_io.c
parent91195ac766d571bad54141725a1e63ac187d62ed (diff)
downloadFreeBSD-src-4052863334f88b834ae48faa0160fd6fdd753299.zip
FreeBSD-src-4052863334f88b834ae48faa0160fd6fdd753299.tar.gz
Balk at unaligned requests.
MFC candidate.
Diffstat (limited to 'sys/geom/geom_io.c')
-rw-r--r--sys/geom/geom_io.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/geom/geom_io.c b/sys/geom/geom_io.c
index 165232b..d1c0fe7 100644
--- a/sys/geom/geom_io.c
+++ b/sys/geom/geom_io.c
@@ -273,6 +273,16 @@ g_io_request(struct bio *bp, struct g_consumer *cp)
case BIO_READ:
case BIO_WRITE:
case BIO_DELETE:
+ /* Reject I/O not on sector boundary */
+ if (bp->bio_offset % bp->bio_to->sectorsize) {
+ g_io_deliver(bp, EINVAL);
+ return;
+ }
+ /* Reject I/O not integral sector long */
+ if (bp->bio_length % bp->bio_to->sectorsize) {
+ g_io_deliver(bp, EINVAL);
+ return;
+ }
/* Reject requests past the end of media. */
if (bp->bio_offset > bp->bio_to->mediasize) {
g_io_deliver(bp, EIO);
OpenPOWER on IntegriCloud