Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Dec 2013 18:20:29 +0200
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Paolo Pinto <paolo.pinto@netasq.com>
Cc:        nicolas dumont <nicolas.dumont@netasq.com>, freebsd-geom@freebsd.org
Subject:   Re: geom_uzip, panic: bio_length in mdstart_vnode()
Message-ID:  <20131204162029.GV59496@kib.kiev.ua>
In-Reply-To: <529F2748.2060900@netasq.com>
References:  <529F2748.2060900@netasq.com>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
On Wed, Dec 04, 2013 at 01:59:52PM +0100, Paolo Pinto wrote:
> Hi list!
> 
> My kernel is compiled with option INVARIANTS and I get a reproducible
> kernel panic when trying to read data from a GEOM based compressed
> memory disk:
> 
> Unread portion of the kernel message buffer:
> panic: bio_length 140288
> cpuid = 3
> KDB: stack backtrace:
> #0 0xffffffff80909726 at kdb_backtrace+0x66
> #1 0xffffffff808d0fa8 at panic+0x1d8
> #2 0xffffffff80595949 at mdstart_vnode+0x619

The issue is that geom_uzip creates bios which are larger than MAXPHYS.

As a workaround, the following patch should be enough.  It only fires
assert when md really uses pbuf, and since geom_uzip knows nothing
about unmapped bio, the assertion must not trigger.

diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c
index 8ae51d1..639677e 100644
--- a/sys/dev/md/md.c
+++ b/sys/dev/md/md.c
@@ -746,12 +746,12 @@ mdstart_vnode(struct md_s *sc, struct bio *bp)
 		return (error);
 	}
 
-	KASSERT(bp->bio_length <= MAXPHYS, ("bio_length %jd",
-	    (uintmax_t)bp->bio_length));
 	if ((bp->bio_flags & BIO_UNMAPPED) == 0) {
 		pb = NULL;
 		aiov.iov_base = bp->bio_data;
 	} else {
+		KASSERT(bp->bio_length <= MAXPHYS, ("bio_length %jd",
+		    (uintmax_t)bp->bio_length));
 		pb = getpbuf(&md_vnode_pbuf_freecnt);
 		pmap_qenter((vm_offset_t)pb->b_data, bp->bio_ma, bp->bio_ma_n);
 		aiov.iov_base = (void *)((vm_offset_t)pb->b_data +

[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (FreeBSD)

iQIcBAEBAgAGBQJSn1ZMAAoJEJDCuSvBvK1BrigQAJQpfjM4ycTdVKcJ7WgE4Nwt
oIos29ut4baVWhD9Va0irsFo8FnzzX78EVSiNrmFtdsVHo017oP/bijqeBZfQMmd
0hmnDBXubN1wsbN/xSJ8yOyCEuZ1t/XziwlviaZlYzs/14nY8KNweDfE8fNEPfoC
nPs9EICfqHn8XNmUAN0gRQ6oKfWxPFUHHeYGSNhwHWospUHimb4F4TzAb2OK+7XL
AwLuVterXL1XAV7+hZfMrRvKKVRW8NL1DFLtmzHrQzvT6+M/VwdHLOYt3+m0UTYL
L7AvHkgAJDGBF5jgqlsoQXA8pVz2kE3RWnFh0jxi8uQjtFm22vt5gvzQ2A6XT2QU
4K4nEzVPRLmJ98RDjAxwleWgJztOfhl2z9BBwjwJ+v4gAFoHrurwQc9PbQ1lX4BF
0MmN5HVe1kq755MMKSef2TKZyHfjrJROqWKKewYkaXWZGckBJVT5WjnRwDGBGz0Y
l3+AznXY/1K80XHV5nFbjZvIxEAiBNuMkyDXb4Y953DhI9oKXDK0virnlgy2CU2g
C1iTI+HiHaexbv4eLd9g04QOYrmXOBwtvfa6LLNaqAz/OKYDFYauBLsqmAJ5Y31s
LXknyzdRpMOdN3kCxNpv8eCR/RcgLzrkN8KIIv72H9xElO0vaF+/p6mnzLzThOn/
pBH8/mQxiP9SI+BEFl8L
=1ztn
-----END PGP SIGNATURE-----

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131204162029.GV59496>