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.

Reply via email to