diff options
author | imp <imp@FreeBSD.org> | 2007-02-03 16:38:32 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2007-02-03 16:38:32 +0000 |
commit | b7897e7411dd7a32ea56b90b9e93b7b10a9031c5 (patch) | |
tree | 6d8cfb45f336b4cc18b384da994f127565952a20 /sys | |
parent | 363d79c219cbbbcae64039c7bcf4d7b7ae968211 (diff) | |
download | FreeBSD-src-b7897e7411dd7a32ea56b90b9e93b7b10a9031c5.zip FreeBSD-src-b7897e7411dd7a32ea56b90b9e93b7b10a9031c5.tar.gz |
Fix possible memory leaks of devinfo.
PR: 108719
Submitted by: Antoine Brodin
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/usb/usb_subr.c | 4 |
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); |