• Alan Stern's avatar
    USB: UDC: net2280: Fix memory leaks · f770fbec
    Alan Stern authored
    As Anton and Evgeny have noted, the net2280 UDC driver has a problem
    with leaking memory along some of its failure pathways.  It also has
    another problem, not previously noted, in that some of the failure
    pathways will call usb_del_gadget_udc() without first calling
    usb_add_gadget_udc_release().  And it leaks memory by calling kfree()
    when it should call put_device().
    
    Previous attempts to fix the problems have failed because of lack of
    support in the UDC core for separately initializing and adding
    gadgets, or for separately deleting and freeing gadgets.  The previous
    patch in this series adds the necessary support, making it possible to
    fix the outstanding problems properly.
    
    This patch adds an "added" flag to the net2280 structure to indicate
    whether or not the gadget has been registered (and thus whether or not
    to call usb_del_gadget()), and it fixes the deallocation issues by
    calling usb_put_gadget() at the appropriate point.
    
    A similar memory leak issue, apparently never before recognized, stems
    from the fact that the driver never initializes the drvdata field in
    the gadget's embedded struct device!  Evidently this wasn't noticed
    because the pointer is only ever used as an argument to kfree(), which
    doesn't mind getting called with a NULL pointer. In fact, the drvdata
    for gadget device will be written by usb_composite_dev structure if
    any gadget class is loaded, so it needs to use usb_gadget structure
    to get net2280 private data.
    
    CC: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Reported-by: default avatarAnton Vasilyev <vasilyev@ispras.ru>
    Reported-by: default avatarEvgeny Novikov <novikov@ispras.ru>
    Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: default avatarPeter Chen <peter.chen@nxp.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
    f770fbec
net2280.h 10.4 KB