On Tue, Sep 16, 2003 at 05:14:51PM -0700, Paul Stewart wrote: > Looks like a straightforward fix, but if you need a patch from me, > for hiddev, Vojtech, let me know what to base it off.
I'll fix it myself, thanks. > > -- > Paul > > In message <[EMAIL PROTECTED]> you write: > >These are the USB leaks (usb-midi, hiddev) from > > > > http://marc.theaimsgroup.com/?l=linux-kernel&m=106368725910864&w= > >2 > > > >In usb-midi, and hiddev. > > > >- Dave > > > > > >Leaks if devices == 0 ? Error_end only frees mdevs if (devices > 0) > >, > >but for mdevs=kmalloc(0), the slab allocator may still actually retu > >rn memory > >[FILE: 2.6.0-test5/drivers/usb/class/usb-midi.c] > >[FUNC: alloc_usb_midi_device] > >[LINES: 1621-1772] > >[VAR: mdevs] > >1616: devices = inDevs > outDevs ? inDevs : outDevs; > >1617: devices = maxdevices > devices ? devices : maxdevices; > >1618: > >1619: /* obtain space for device name (iProduct) if not known. */ > >1620: if ( ! u->deviceName ) { > >START --> > >1621: mdevs = (struct usb_mididev **) > >1622: kmalloc(sizeof(struct usb_mididevs *)*devices > >1623: + sizeof(char) * 256, GFP_KERNEL); > >1624: } else { > >1625: mdevs = (struct usb_mididev **) > >1626: kmalloc(sizeof(struct usb_mididevs *)*devices > >, GFP_KERNEL); > > ... DELETED 83 lines ... > >1710: } > >1711: mout = mouts[outEndpoint]; > >1712: > >1713: mdevs[i] = allocMidiDev( s, min, mout, inCableId, out > >CableId ); > >1714: if ( mdevs[i] == NULL ) > >GOTO --> > >1715: goto error_end; > >1716: > >1717: } > >1718: > >1719: /* Success! */ > >1720: for ( i=0 ; i<devices ; i++ ) { > > ... DELETED 46 lines ... > >1767: if ( mouts[i] != NULL ) { > >1768: remove_midi_out_endpoint( mouts[i] ); > >1769: } > >1770: } > >1771: > >END --> > >1772: return -ENOMEM; > >1773:} > >1774: > >--------------------------------------------------------- > > > >[FILE: 2.6.0-test5/drivers/usb/input/hiddev.c] > >[FUNC: hiddev_connect] > >[LINES: 723-730] > >[VAR: hiddev] > > 718: break; > > 719: > > 720: if (i == hid->maxcollection && (hid->quirks & HID_QUIRK_HIDDE > >V) == 0) > > 721: return -1; > > 722: > >START --> > > 723: if (!(hiddev = kmalloc(sizeof(struct hiddev), GFP_KER > >NEL))) > > 724: return -1; > > 725: memset(hiddev, 0, sizeof(struct hiddev)); > > 726: > > 727: retval = usb_register_dev(&hiddev->intf, &hiddev_clas > >s); > > 728: if (retval) { > > 729: err("Not able to get a minor for this device."); > >END --> > > 730: return -1; > > 731: } > > 732: > > 733: init_waitqueue_head(&hiddev->wait); > > 734: > > 735: hiddev->minor = hiddev->intf.minor; > >--------------------------------------------------------- > > > > > > -- Vojtech Pavlik SuSE Labs, SuSE CR ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel