Subject: kern/36556: sys/dev/biovar.h defines bv_size and bd_size as size_t which can be only 32 bits
To: None <,,>
From: None <>
List: netbsd-bugs
Date: 06/25/2007 19:20:00
>Number:         36556
>Category:       kern
>Synopsis:       bd_size and bv_size in sys/dev/biovar.h is size_t, which may be only 32 bits.
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jun 25 19:20:00 +0000 2007
>Originator:     Michael L. Hitch
>Release:        NetBSD 4.99.20 and NetBSD-4.0_BETA2
System: NetBSD 4.99.20 NetBSD 4.99.20 (GENERIC) #35: Fri Jun 22 11:10:28 MDT 2007 i386
Architecture: i386
Machine: i386
  The definitions of bd_size (device size) and bv_size (volume size) in
  sys/dev/biovar.h are defined as size_t.  However, size_t may only be
  32 bits on many architectures and limits the disk/volume size to 4GB.
  Run bioctl on NetBSD/i386 (currently only supports the mfi(4) raid
  adapter, and note that the reported sizes are incorrect if the disk
  or raid volume exceeds 4GB.
  The bd_size and bv_size fields should be defined as ssize_t or off_t
  (I'm not sure what the correct definition of ssize_t is, but off_t
  is used for 64 bit offsets).

  This could cause compatibility problems (Manuel Bouyer suggested
  keeping compat ioctls for COMPAT_40).  I'm not sure that compatibilty
  is that much of an issue.  There (currently) is no relase using bio(4)
  with the existing definitions of bd_size and bv_size (although that
  could change if nothing is done about this before 4.0 gets released).
  Also, biovar.h is only used in the kernel and the bioctl(1) program
  and bio(4) currently only supports mfi(4).  [I've been working on
  adding ciss(4) support as well as amr(4) support, which is how I
  ran into this problem.]  If anyone was currently using bioctl with
  mfi raid volumes, they would either be builing -current or
  NetBSD-4.0_BETA2 themselve, and can easily replace bioctl(1) if they
  update the kernel without updating userland.  The same thing could
  be done if using the autobuilds of -current or netbsd-4.

Index: sys/dev/biovar.h
RCS file: /cvsroot/src/sys/dev/biovar.h,v
retrieving revision 1.1
diff -u -r1.1 biovar.h
--- sys/dev/biovar.h	1 May 2007 17:20:11 -0000	1.1
+++ sys/dev/biovar.h	25 Jun 2007 18:14:46 -0000
@@ -90,7 +90,7 @@
 #define BIOC_SDSCRUB_S		"Scrubbing"
 #define BIOC_SDINVALID		0xff
 #define BIOC_SDINVALID_S	"Invalid"
-	size_t		bd_size;	/* size of the disk */
+	off_t		bd_size;	/* size of the disk */
 	char		bd_vendor[32];	/* scsi string */
 	char		bd_serial[32];	/* serial number */
@@ -121,7 +121,7 @@
 #define BIOC_SVREBUILD_S	"Rebuild"
 #define BIOC_SVINVALID		0xff
 #define BIOC_SVINVALID_S	"Invalid"
-	size_t		bv_size;	/* size of the disk */
+	off_t		bv_size;	/* size of the disk */
 	int		bv_level;	/* raid level */
 	int		bv_nodisk;	/* nr of drives */