Date: Sun, 6 Oct 2002 01:40:26 +0100 From: Brian Somers <brian@Awfulhak.org> To: Bruce Evans <bde@zeta.org.au> Cc: brian@FreeBSD.org, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/kern subr_disk.c Message-ID: <20021006014026.63604067.brian@Awfulhak.org> In-Reply-To: <20021005235134.J12119-100000@gamplex.bde.org> References: <200210051124.g95BOMk2092338@freefall.freebsd.org> <20021005235134.J12119-100000@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 6 Oct 2002 00:15:37 +1000 (EST), Bruce Evans <bde@zeta.org.au> wrote:
> On Sat, 5 Oct 2002, Brian Somers wrote:
>
> > brian 2002/10/05 04:24:22 PDT
> >
> > Modified files:
> > sys/kern subr_disk.c
> > Log:
> > If dsgetlabel() returns a label with a size of zero in diskdumpconf(),
> > treat it as an invalid partition.
> >
> > This fixes a bug where ``dumpon <device>'' will configure the dump
> > device at a random offset on the disk if <device> isn't a valid
> > partition.
>
> This seems to only unbreak the case where the partition size is 0. At
> least the i386 dumpsys() has no bounds checking at the partition level.
> It clobbers sectors outside of the partition starting at the non-random
> offset dumplo given by:
>
> dumplo = di->mediaoffset + di->mediasize - Maxmem * (off_t)PAGE_SIZE;
> dumplo -= sizeof kdh * 2;
>
> except in the following cases:
> - if di_mediasize is actually large enough to hold the data
> (di_mediasize >= Maxmem * (off_t)PAGE_SIZE + sizeof(kdh) * 2 +
> <space for metadata, e.g., LABELSECTOR sectors>)
> - if di_mediasize is 0 (or just small), then dumplo is negative and the
> disk driver's or hardware's bounds checking (of physical sector numbers)
> should prevent problems.
>
> Bruce
I'm not sure what ``space for metadata'' is for. The attached patch seems to
get the answer right here on i386, although I can't vouch for ia64 or sparc64
working correctly (their dumpsys() seems different).
Do you think I should commit this ?
--
Brian <brian@Awfulhak.org> <brian@[uk.]FreeBSD.org>
<http://www.Awfulhak.org> <brian@[uk.]OpenBSD.org>
Don't _EVER_ lose your sense of humour !
Index: subr_disk.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/subr_disk.c,v
retrieving revision 1.61
diff -u -r1.61 subr_disk.c
--- subr_disk.c 5 Oct 2002 16:35:31 -0000 1.61
+++ subr_disk.c 6 Oct 2002 00:31:43 -0000
@@ -20,6 +20,7 @@
#include <sys/disk.h>
#include <sys/diskslice.h>
#include <sys/disklabel.h>
+#include <sys/kerneldump.h>
#ifdef NO_GEOM
#include <sys/kernel.h>
#include <sys/sysctl.h>
@@ -222,6 +223,9 @@
di.mediasize =
(off_t)(dl->d_partitions[dkpart(dev)].p_size) * DEV_BSIZE;
if (di.mediasize == 0)
+ return (EINVAL);
+ if (di.mediasize < Maxmem * (off_t)PAGE_SIZE +
+ sizeof(struct kerneldumpheader) * 2)
return (EINVAL);
return(set_dumper(&di));
}
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021006014026.63604067.brian>
