From owner-p4-projects@FreeBSD.ORG Sun May 28 10:13:58 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1BCF516D29C; Sun, 28 May 2006 10:01:47 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 91A9216D010 for ; Sun, 28 May 2006 09:41:13 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 54C1643D53 for ; Sun, 28 May 2006 09:41:13 +0000 (GMT) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k4S9e5ts000805 for ; Sun, 28 May 2006 09:40:05 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k4S9e5VQ000799 for perforce@freebsd.org; Sun, 28 May 2006 09:40:05 GMT (envelope-from hselasky@FreeBSD.org) Date: Sun, 28 May 2006 09:40:05 GMT Message-Id: <200605280940.k4S9e5VQ000799@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 98001 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 May 2006 10:14:00 -0000 http://perforce.freebsd.org/chv.cgi?CH=98001 Change 98001 by hselasky@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);