usb/108719: [patch] Plug a few memory leaks in sys/dev/usb

Antoine Brodin antoine.brodin at laposte.net
Sat Feb 3 14:40:17 UTC 2007


>Number:         108719
>Category:       usb
>Synopsis:       [patch] Plug a few memory leaks in sys/dev/usb
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-usb
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Feb 03 14:40:16 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator:     Antoine Brodin
>Release:        FreeBSD 7.0-CURRENT i386
>Organization:
none
>Environment:
System: FreeBSD barton.dreadbsd.org 7.0-CURRENT FreeBSD 7.0-CURRENT #0: Sun Jan 28 12:17:13 CET 2007 antoine at barton.dreadbsd.org:/usr/obj/usr/src/sys/BARTON i386


>Description:
There are a few memory leaks in /sys/dev/usb/
Patch is attached.
>How-To-Repeat:
>Fix:


--- sysdevusb.diff begins here ---
Index: usb/uhub.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/usb/uhub.c,v
retrieving revision 1.72
diff -u -p -r1.72 uhub.c
--- usb/uhub.c	7 Sep 2006 00:06:41 -0000	1.72
+++ usb/uhub.c	28 Jan 2007 17:06:03 -0000
@@ -362,6 +362,7 @@ USB_ATTACH(uhub)
 	/* The usual exploration will finish the setup. */
 
 	sc->sc_running = 1;
+	free(devinfo, M_TEMP);
 
 	USB_ATTACH_SUCCESS_RETURN;
 
Index: usb/uipaq.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/usb/uipaq.c,v
retrieving revision 1.1
diff -u -p -r1.1 uipaq.c
--- usb/uipaq.c	28 Jan 2007 11:56:14 -0000	1.1
+++ usb/uipaq.c	28 Jan 2007 13:43:36 -0000
@@ -186,7 +186,6 @@ USB_ATTACH(uipaq)
 	usbd_devinfo(dev, 0, devinfop);
 
 	printf("%s: %s\n", devname, devinfop);
-	free(devinfop, M_USBDEV);
 
 	sc->sc_flags = uipaq_lookup(uaa->vendor, uaa->product)->uv_flags;
 
@@ -225,13 +224,14 @@ USB_ATTACH(uipaq)
 	}
 	
 	ucom_attach(&sc->sc_ucom);
-		
-	   
+	free(devinfop, M_USBDEV);
+
 	USB_ATTACH_SUCCESS_RETURN;
 
 bad:
 	DPRINTF(("uipaq_attach: ATTACH ERROR\n"));
 	ucom->sc_dying = 1;
+	free(devinfop, M_USBDEV);
 	USB_ATTACH_ERROR_RETURN;
 }
 
Index: usb/usb_subr.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/usb/usb_subr.c,v
retrieving revision 1.87
diff -u -p -r1.87 usb_subr.c
--- usb/usb_subr.c	3 Oct 2006 01:13:26 -0000	1.87
+++ usb/usb_subr.c	28 Jan 2007 17:06:27 -0000
@@ -944,6 +944,7 @@ usbd_probe_and_attach(device_t parent, u
 				}
 				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 +988,7 @@ usbd_probe_and_attach(device_t parent, u
 	*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);
Index: usb/uvisor.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/usb/uvisor.c,v
retrieving revision 1.28
diff -u -p -r1.28 uvisor.c
--- usb/uvisor.c	7 Sep 2006 00:06:42 -0000	1.28
+++ usb/uvisor.c	28 Jan 2007 13:43:00 -0000
@@ -377,12 +377,14 @@ USB_ATTACH(uvisor)
 
 	DPRINTF(("uvisor: in=0x%x out=0x%x\n", ucom->sc_bulkin_no, ucom->sc_bulkout_no));
 	ucom_attach(&sc->sc_ucom);
+	free(devinfo, M_USBDEV);
 
 	USB_ATTACH_SUCCESS_RETURN;
 
 bad:
 	DPRINTF(("uvisor_attach: ATTACH ERROR\n"));
 	ucom->sc_dying = 1;
+	free(devinfo, M_USBDEV);
 	USB_ATTACH_ERROR_RETURN;
 }
 
--- sysdevusb.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-usb mailing list