Module Name:    src
Committed By:   christos
Date:           Sat Aug  7 21:09:49 UTC 2010

Modified Files:
        src/sys/dev/usb: usb_subr.c usb_verbose.c usb_verbose.h

Log Message:
Pass the lengths of the buffers and use bound string functions where easy
to do so.


To generate a diff of this commit:
cvs rdiff -u -r1.174 -r1.175 src/sys/dev/usb/usb_subr.c
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/usb/usb_verbose.c
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/usb/usb_verbose.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/usb/usb_subr.c
diff -u src/sys/dev/usb/usb_subr.c:1.174 src/sys/dev/usb/usb_subr.c:1.175
--- src/sys/dev/usb/usb_subr.c:1.174	Tue Jul 27 12:15:30 2010
+++ src/sys/dev/usb/usb_subr.c	Sat Aug  7 17:09:48 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_subr.c,v 1.174 2010/07/27 16:15:30 drochner Exp $	*/
+/*	$NetBSD: usb_subr.c,v 1.175 2010/08/07 21:09:48 christos Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $	*/
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.174 2010/07/27 16:15:30 drochner Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.175 2010/08/07 21:09:48 christos Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_usbverbose.h"
@@ -70,16 +70,16 @@
 
 Static usbd_status usbd_set_config(usbd_device_handle, int);
 Static void usbd_devinfo(usbd_device_handle, int, char *, size_t);
-Static void usbd_devinfo_vp(usbd_device_handle dev, char *v, char *p,
-			    int usedev, int useencoded);
-Static int usbd_getnewaddr(usbd_bus_handle bus);
+Static void usbd_devinfo_vp(usbd_device_handle, char *, size_t, char *, size_t,
+    int, int);
+Static int usbd_getnewaddr(usbd_bus_handle);
 Static int usbd_print(void *, const char *);
 Static int usbd_ifprint(void *, const char *);
-Static void usbd_free_iface_data(usbd_device_handle dev, int ifcno);
+Static void usbd_free_iface_data(usbd_device_handle, int);
 Static void usbd_kill_pipe(usbd_pipe_handle);
 usbd_status usbd_attach_roothub(device_t, usbd_device_handle);
-Static usbd_status usbd_probe_and_attach(device_t parent,
-                                 usbd_device_handle dev, int port, int addr);
+Static usbd_status usbd_probe_and_attach(device_t, usbd_device_handle, int,
+    int);
 
 Static u_int32_t usb_cookie_no = 0;
 
@@ -108,11 +108,11 @@
 
 void usb_load_verbose(void);
 
-void get_usb_vendor_stub(char *, usb_vendor_id_t);
-void get_usb_product_stub(char *, usb_vendor_id_t, usb_product_id_t);
+void get_usb_vendor_stub(char *, size_t, usb_vendor_id_t);
+void get_usb_product_stub(char *, size_t, usb_vendor_id_t, usb_product_id_t);
 
-void (*get_usb_vendor)(char *, usb_vendor_id_t) = get_usb_vendor_stub;
-void (*get_usb_product)(char *, usb_vendor_id_t, usb_product_id_t) =
+void (*get_usb_vendor)(char *, size_t, usb_vendor_id_t) = get_usb_vendor_stub;
+void (*get_usb_product)(char *, size_t, usb_vendor_id_t, usb_product_id_t) =
 	get_usb_product_stub;
 
 int usb_verbose_loaded = 0;
@@ -129,18 +129,19 @@
 	}
 }
 
-void get_usb_vendor_stub(char *v, usb_vendor_id_t v_id)
+void get_usb_vendor_stub(char *v, size_t l, usb_vendor_id_t v_id)
 {
 	usb_load_verbose();
 	if (usb_verbose_loaded)
-		get_usb_vendor(v, v_id);
+		get_usb_vendor(v, l, v_id);
 }
 
-void get_usb_product_stub(char *p, usb_vendor_id_t v_id, usb_product_id_t p_id)
+void get_usb_product_stub(char *p, size_t l, usb_vendor_id_t v_id,
+    usb_product_id_t p_id)
 {
 	usb_load_verbose();
 	if (usb_verbose_loaded)
-		get_usb_product(p, v_id, p_id);
+		get_usb_product(p, l, v_id, p_id);
 }
 
 const char *
@@ -207,15 +208,15 @@
 }
 
 Static void
-usbd_devinfo_vp(usbd_device_handle dev, char *v, char *p, int usedev,
-		int useencoded)
+usbd_devinfo_vp(usbd_device_handle dev, char *v, size_t vl, char *p,
+    size_t pl, int usedev, int useencoded)
 {
 	usb_device_descriptor_t *udd = &dev->ddesc;
-
-	v[0] = p[0] = '\0';
 	if (dev == NULL)
 		return;
 
+	v[0] = p[0] = '\0';
+
 	if (usedev) {
 		if (usbd_get_string0(dev, udd->iManufacturer, v, useencoded) ==
 		    USBD_NORMAL_COMPLETION)
@@ -225,21 +226,21 @@
 			usbd_trim_spaces(p);
 	}
 	if (v[0] == '\0')
-		get_usb_vendor(v, UGETW(udd->idVendor));
+		get_usb_vendor(v, vl, UGETW(udd->idVendor));
 	if (p[0] == '\0')
-		get_usb_product(p, UGETW(udd->idVendor), UGETW(udd->idProduct));
+		get_usb_product(p, pl, UGETW(udd->idVendor),
+		    UGETW(udd->idProduct));
 
-	/* There is no need for snprintf below. */
 	if (v[0] == '\0')
-		sprintf(v, "vendor 0x%04x", UGETW(udd->idVendor));
+		snprintf(v, vl, "vendor 0x%04x", UGETW(udd->idVendor));
 	if (p[0] == '\0')
-		sprintf(p, "product 0x%04x", UGETW(udd->idProduct));
+		snprintf(p, pl, "product 0x%04x", UGETW(udd->idProduct));
 }
 
 int
 usbd_printBCD(char *cp, size_t l, int bcd)
 {
-	return (snprintf(cp, l, "%x.%02x", bcd >> 8, bcd & 0xff));
+	return snprintf(cp, l, "%x.%02x", bcd >> 8, bcd & 0xff);
 }
 
 Static void
@@ -259,7 +260,8 @@
 
 	ep = cp + l;
 
-	usbd_devinfo_vp(dev, vendor, product, 1, 1);
+	usbd_devinfo_vp(dev, vendor, USB_MAX_ENCODED_STRING_LEN,
+	    product, USB_MAX_ENCODED_STRING_LEN, 1, 1);
 	cp += snprintf(cp, ep - cp, "%s %s", vendor, product);
 	if (showclass)
 		cp += snprintf(cp, ep - cp, ", class %d/%d",
@@ -1353,7 +1355,8 @@
 	di->udi_bus = device_unit(dev->bus->usbctl);
 	di->udi_addr = dev->address;
 	di->udi_cookie = dev->cookie;
-	usbd_devinfo_vp(dev, di->udi_vendor, di->udi_product, usedev, 1);
+	usbd_devinfo_vp(dev, di->udi_vendor, sizeof(di->udi_vendor),
+	    di->udi_product, sizeof(di->udi_product), usedev, 1);
 	usbd_printBCD(di->udi_release, sizeof(di->udi_release),
 	    UGETW(dev->ddesc.bcdDevice));
 	di->udi_serial[0] = 0;
@@ -1423,7 +1426,8 @@
 	di->udi_bus = device_unit(dev->bus->usbctl);
 	di->udi_addr = dev->address;
 	di->udi_cookie = dev->cookie;
-	usbd_devinfo_vp(dev, di->udi_vendor, di->udi_product, usedev, 0);
+	usbd_devinfo_vp(dev, di->udi_vendor, sizeof(di->udi_vendor),
+	    di->udi_product, sizeof(di->udi_product), usedev, 0);
 	usbd_printBCD(di->udi_release, sizeof(di->udi_release),
 	    UGETW(dev->ddesc.bcdDevice));
 	di->udi_vendorNo = UGETW(dev->ddesc.idVendor);

Index: src/sys/dev/usb/usb_verbose.c
diff -u src/sys/dev/usb/usb_verbose.c:1.3 src/sys/dev/usb/usb_verbose.c:1.4
--- src/sys/dev/usb/usb_verbose.c:1.3	Sun Jul 25 09:19:27 2010
+++ src/sys/dev/usb/usb_verbose.c	Sat Aug  7 17:09:48 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_verbose.c,v 1.3 2010/07/25 13:19:27 pgoyette Exp $ */
+/*	$NetBSD: usb_verbose.c,v 1.4 2010/08/07 21:09:48 christos Exp $ */
 /*	$FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $	*/
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb_verbose.c,v 1.3 2010/07/25 13:19:27 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb_verbose.c,v 1.4 2010/08/07 21:09:48 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/module.h>
@@ -56,16 +56,16 @@
 
 #include <dev/usb/usbdevs_data.h>
 
-void get_usb_vendor_real(char *, usb_vendor_id_t);
-void get_usb_product_real(char *, usb_vendor_id_t, usb_product_id_t);
+void get_usb_vendor_real(char *, size_t, usb_vendor_id_t);
+void get_usb_product_real(char *, size_t, usb_vendor_id_t, usb_product_id_t);
 
 MODULE(MODULE_CLASS_MISC, usbverbose, NULL);
   
 static int
 usbverbose_modcmd(modcmd_t cmd, void *arg)
 {
-	static void (*saved_usb_vendor)(char *, usb_vendor_id_t);
-	static void (*saved_usb_product)(char *, usb_vendor_id_t,
+	static void (*saved_usb_vendor)(char *, size_t, usb_vendor_id_t);
+	static void (*saved_usb_product)(char *, size_t, usb_vendor_id_t,
 		usb_product_id_t);
 
 	switch (cmd) {
@@ -86,19 +86,20 @@
 	}
 }
 
-void get_usb_vendor_real(char *v, usb_vendor_id_t v_id)
+void get_usb_vendor_real(char *v, size_t vl, usb_vendor_id_t v_id)
 {
 	int n;
 
 	/* There is no need for strlcpy below. */
 	for (n = 0; n < usb_nvendors; n++)
 		if (usb_vendors[n].vendor == v_id) {
-			strcpy(v, usb_vendors[n].vendorname);
+			strlcpy(v, usb_vendors[n].vendorname, vl);
 			break;
 		}
 }
 
-void get_usb_product_real(char *p, usb_vendor_id_t v_id, usb_product_id_t p_id)
+void get_usb_product_real(char *p, size_t pl, usb_vendor_id_t v_id,
+    usb_product_id_t p_id)
 {
 	int n;
 
@@ -106,7 +107,7 @@
 	for (n = 0; n < usb_nproducts; n++)
 		if (usb_products[n].vendor == v_id &&
 		    usb_products[n].product == p_id) {
-			strcpy(p, usb_products[n].productname);
+			strlcpy(p, usb_products[n].productname, pl);
 			break;
 		}
 }

Index: src/sys/dev/usb/usb_verbose.h
diff -u src/sys/dev/usb/usb_verbose.h:1.2 src/sys/dev/usb/usb_verbose.h:1.3
--- src/sys/dev/usb/usb_verbose.h:1.2	Sun Jun  6 14:58:26 2010
+++ src/sys/dev/usb/usb_verbose.h	Sat Aug  7 17:09:48 2010
@@ -1,4 +1,4 @@
-/*      $NetBSD: usb_verbose.h,v 1.2 2010/06/06 18:58:26 pgoyette Exp $ */
+/*      $NetBSD: usb_verbose.h,v 1.3 2010/08/07 21:09:48 christos Exp $ */
 
 /*
  * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc.
@@ -36,8 +36,9 @@
 typedef u_int16_t usb_vendor_id_t;
 typedef u_int16_t usb_product_id_t;
 
-extern void (*get_usb_vendor)(char *, usb_vendor_id_t);
-extern void (*get_usb_product)(char *, usb_vendor_id_t, usb_product_id_t);
+extern void (*get_usb_vendor)(char *, size_t, usb_vendor_id_t);
+extern void (*get_usb_product)(char *, size_t, usb_vendor_id_t,
+    usb_product_id_t);
 
 extern int usb_verbose_loaded;
 

Reply via email to