summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2007-02-03 16:38:32 +0000
committerimp <imp@FreeBSD.org>2007-02-03 16:38:32 +0000
commitb7897e7411dd7a32ea56b90b9e93b7b10a9031c5 (patch)
tree6d8cfb45f336b4cc18b384da994f127565952a20 /sys/dev/usb
parent363d79c219cbbbcae64039c7bcf4d7b7ae968211 (diff)
downloadFreeBSD-src-b7897e7411dd7a32ea56b90b9e93b7b10a9031c5.zip
FreeBSD-src-b7897e7411dd7a32ea56b90b9e93b7b10a9031c5.tar.gz
Fix possible memory leaks of devinfo.
PR: 108719 Submitted by: Antoine Brodin
Diffstat (limited to 'sys/dev/usb')
-rw-r--r--sys/dev/usb/usb_subr.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/dev/usb/usb_subr.c b/sys/dev/usb/usb_subr.c
index a8b8512..685c562 100644
--- a/sys/dev/usb/usb_subr.c
+++ b/sys/dev/usb/usb_subr.c
@@ -817,7 +817,6 @@ usbd_probe_and_attach(device_t parent, usbd_device_handle dev,
usbd_interface_handle ifaces[256]; /* 256 is the absolute max */
char *devinfo;
-#if defined(__FreeBSD__)
/* XXX FreeBSD may leak resources on failure cases -- fixme */
device_t bdev;
struct usb_attach_arg *uaap;
@@ -839,7 +838,6 @@ usbd_probe_and_attach(device_t parent, usbd_device_handle dev,
return (USBD_INVAL);
}
device_set_ivars(bdev, uaap);
-#endif
uaa.device = dev;
uaa.iface = NULL;
uaa.ifaces = NULL;
@@ -944,6 +942,7 @@ usbd_probe_and_attach(device_t parent, usbd_device_handle dev,
}
uaap = malloc(sizeof(uaa), M_USB, M_NOWAIT);
if (uaap == NULL) {
+ free(devinfo, M_USB);
return (USBD_NOMEM);
}
device_set_ivars(bdev, uaap);
@@ -987,6 +986,7 @@ usbd_probe_and_attach(device_t parent, usbd_device_handle dev,
*uaap = uaa;
usbd_devinfo(dev, 1, devinfo);
device_set_desc_copy(bdev, devinfo);
+ free(devinfo, M_USB);
dv = USB_DO_ATTACH(dev, bdev, parent, &uaa, usbd_print, usbd_submatch);
if (dv != NULL)
return (USBD_NORMAL_COMPLETION);
OpenPOWER on IntegriCloud