Module Name: src Committed By: kiyohara Date: Mon Sep 20 06:54:06 UTC 2010
Modified Files: src/sys/dev: ld.c ldvar.h Log Message: Check disk bounds, in RAW_PART. To generate a diff of this commit: cvs rdiff -u -r1.67 -r1.68 src/sys/dev/ld.c cvs rdiff -u -r1.17 -r1.18 src/sys/dev/ldvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/ld.c diff -u src/sys/dev/ld.c:1.67 src/sys/dev/ld.c:1.68 --- src/sys/dev/ld.c:1.67 Thu Aug 19 17:59:10 2010 +++ src/sys/dev/ld.c Mon Sep 20 06:54:06 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: ld.c,v 1.67 2010/08/19 17:59:10 jmcneill Exp $ */ +/* $NetBSD: ld.c,v 1.68 2010/09/20 06:54:06 kiyohara Exp $ */ /*- * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.67 2010/08/19 17:59:10 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.68 2010/09/20 06:54:06 kiyohara Exp $"); #include "rnd.h" @@ -145,6 +145,7 @@ "%d bytes/sect x %"PRIu64" sectors\n", tbuf, sc->sc_ncylinders, sc->sc_nheads, sc->sc_nsectors, sc->sc_secsize, sc->sc_secperunit); + sc->sc_disksize512 = sc->sc_secperunit * sc->sc_secsize / DEV_BSIZE; ld_set_properties(sc); @@ -626,10 +627,14 @@ * Do bounds checking and adjust the transfer. If error, process. * If past the end of partition, just return. */ - if (part != RAW_PART && - bounds_check_with_label(&sc->sc_dk, bp, - (sc->sc_flags & (LDF_WLABEL | LDF_LABELLING)) != 0) <= 0) { - goto done; + if (part == RAW_PART) { + if (bounds_check_with_mediasize(bp, DEV_BSIZE, + sc->sc_disksize512) <= 0) + goto done; + } else { + if (bounds_check_with_label(&sc->sc_dk, bp, + (sc->sc_flags & (LDF_WLABEL | LDF_LABELLING)) != 0) <= 0) + goto done; } /* Index: src/sys/dev/ldvar.h diff -u src/sys/dev/ldvar.h:1.17 src/sys/dev/ldvar.h:1.18 --- src/sys/dev/ldvar.h:1.17 Fri Dec 18 00:40:24 2009 +++ src/sys/dev/ldvar.h Mon Sep 20 06:54:06 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: ldvar.h,v 1.17 2009/12/18 00:40:24 jakllsch Exp $ */ +/* $NetBSD: ldvar.h,v 1.18 2010/09/20 06:54:06 kiyohara Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -52,6 +52,7 @@ int sc_ncylinders; /* # cylinders */ int sc_nheads; /* # heads */ int sc_nsectors; /* # sectors per track */ + int sc_disksize512; /* * The following are filled by hardware specific attachment code.