Date: Thu, 30 Dec 2004 20:28:24 +0100 From: des@des.no (=?iso-8859-1?q?Dag-Erling_Sm=F8rgrav?=) To: geom@freebsd.org Subject: Re: GEOM_VOL panics when audio CD is present Message-ID: <xzpsm5nvb53.fsf@dwp.des.no> In-Reply-To: <xzpfz1pksny.fsf@dwp.des.no> (Dag-Erling =?iso-8859-1?q?Sm=F8rgrav's?= message of "Wed, 29 Dec 2004 16:53:05 %2B0100") References: <xzpfz1pksny.fsf@dwp.des.no>
next in thread | previous in thread | raw e-mail | index | archive | help
--=-=-=
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable
Any objections to the attached patch? It's not the most efficient
solution, but it is the one least likely to give us surprises down the
road.
DES
--=20
Dag-Erling Sm=F8rgrav - des@des.no
--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment; filename=geom_vol.diff
Index: sys/geom/geom_vol_ffs.c
===================================================================
RCS file: /home/ncvs/src/sys/geom/geom_vol_ffs.c,v
retrieving revision 1.13
diff -u -r1.13 geom_vol_ffs.c
--- sys/geom/geom_vol_ffs.c 9 Aug 2004 06:04:00 -0000 1.13
+++ sys/geom/geom_vol_ffs.c 30 Dec 2004 19:22:30 -0000
@@ -88,6 +88,16 @@
* provider based on that.
*/
for (sb=0; (superblock = superblocks[sb]) != -1; sb++) {
+ /*
+ * Take care not to issue an invalid I/O request. The
+ * offset and size of the superblock candidate must be
+ * multiples of the provider's sector size, otherwise an
+ * FFS can't exist on the provider anyway.
+ */
+ if (superblock % cp->provider->sectorsize != 0 ||
+ SBLOCKSIZE % cp->provider->sectorsize != 0)
+ continue;
+
fs = (struct fs *) g_read_data(cp, superblock,
SBLOCKSIZE, &error);
if (fs == NULL || error != 0)
--=-=-=--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?xzpsm5nvb53.fsf>
