PERFORCE change 98001 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Sun May 28 03:14:00 PDT 2006
http://perforce.freebsd.org/chv.cgi?CH=98001
Change 98001 by hselasky at hselasky_mini_itx on 2006/05/28 09:39:32
Add rangecheck for devinfo.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/uhub.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb/ulpt.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_subr.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_subr.h#4 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/uhub.c#4 (text+ko) ====
@@ -354,10 +354,8 @@
usb_device_request_t req;
usb_hub_descriptor_t hubdesc;
int port, nports, removable, pwrdly;
- char devinfo[1024];
+ char devinfo[256];
- /* XXX no range check for devinfo */
-
DPRINTFN(1,("\n"));
sc->sc_hub = udev;
@@ -564,9 +562,9 @@
usbd_delay_ms(udev, pwrdly);
}
- usbd_devinfo(udev, 1, &devinfo[0]);
- device_set_desc_copy(dev, &devinfo[0]);
- device_printf(dev, "%s\n", &devinfo[0]);
+ usbd_devinfo(udev, 1, devinfo, sizeof(devinfo));
+ device_set_desc_copy(dev, devinfo);
+ device_printf(dev, "%s\n", devinfo);
device_printf(dev, "%d port%s with %d "
"removable, %s powered\n",
nports, (nports != 1) ? "s" : "",
==== //depot/projects/usb/src/sys/dev/usb/ulpt.c#4 (text+ko) ====
==== //depot/projects/usb/src/sys/dev/usb/usb_subr.c#4 (text+ko) ====
@@ -189,28 +189,36 @@
}
void
-usbd_devinfo(struct usbd_device *udev, int showclass, char *cp)
+usbd_devinfo(struct usbd_device *udev, int showclass,
+ char *dst_ptr, u_int16_t dst_len)
{
usb_device_descriptor_t *udd = &udev->ddesc;
char vendor[USB_MAX_STRING_LEN];
char product[USB_MAX_STRING_LEN];
- int bcdDevice, bcdUSB;
+ u_int16_t bcdDevice, bcdUSB;
usbd_devinfo_vp(udev, vendor, product, 1);
- cp += sprintf(cp, "%s %s", vendor, product);
+
+ bcdUSB = UGETW(udd->bcdUSB);
+ bcdDevice = UGETW(udd->bcdDevice);
+
if(showclass)
{
- cp += sprintf(cp, ", class %d/%d",
- udd->bDeviceClass, udd->bDeviceSubClass);
+ snprintf(dst_ptr, dst_len, "%s %s, class %d/%d, rev %x.%02x/"
+ "%x.%02x, addr %d", vendor, product,
+ udd->bDeviceClass, udd->bDeviceSubClass,
+ (bcdUSB >> 8), bcdUSB & 0xFF,
+ (bcdDevice >> 8), bcdDevice & 0xFF,
+ udev->address);
+ }
+ else
+ {
+ snprintf(dst_ptr, dst_len, "%s %s, rev %x.%02x/"
+ "%x.%02x, addr %d", vendor, product,
+ (bcdUSB >> 8), bcdUSB & 0xFF,
+ (bcdDevice >> 8), bcdDevice & 0xFF,
+ udev->address);
}
- bcdUSB = UGETW(udd->bcdUSB);
- bcdDevice = UGETW(udd->bcdDevice);
- cp += sprintf(cp, ", rev ");
- cp += usbd_printBCD(cp, bcdUSB);
- *cp++ = '/';
- cp += usbd_printBCD(cp, bcdDevice);
- cp += sprintf(cp, ", addr %d", udev->address);
- *cp = 0;
return;
}
@@ -1548,10 +1556,10 @@
void
usbd_set_desc(device_t dev, struct usbd_device *udev)
{
- u_int8_t devinfo[1024];
+ u_int8_t devinfo[256];
- usbd_devinfo(udev, 1, &devinfo[0]);
- device_set_desc_copy(dev, &devinfo[0]);
- device_printf(dev, "<%s>\n", &devinfo[0]);
+ usbd_devinfo(udev, 1, devinfo, sizeof(devinfo));
+ device_set_desc_copy(dev, devinfo);
+ device_printf(dev, "<%s>\n", devinfo);
return;
}
==== //depot/projects/usb/src/sys/dev/usb/usb_subr.h#4 (text+ko) ====
@@ -457,7 +457,8 @@
/* routines from usb_subr.c */
void
-usbd_devinfo(struct usbd_device *udev, int showclass, char *cp);
+usbd_devinfo(struct usbd_device *udev, int showclass,
+ char *dst_ptr, u_int16_t dst_len);
const char *
usbd_errstr(usbd_status err);
More information about the p4-projects
mailing list