lkml.org 
[lkml]   [2014]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.16 133/357] usb: hub: take hub->hdev reference when processing from eventlist
    Date
    3.16-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Joe Lawrence <joe.lawrence@stratus.com>

    commit c605f3cdff53a743f6d875b76956b239deca1272 upstream.

    During surprise device hotplug removal tests, it was observed that
    hub_events may try to call usb_lock_device on a device that has already
    been freed. Protect the usb_device by taking out a reference (under the
    hub_event_lock) when hub_events pulls it off the list, returning the
    reference after hub_events is finished using it.

    Signed-off-by: Joe Lawrence <joe.lawrence@stratus.com>
    Suggested-by: David Bulkow <david.bulkow@stratus.com> for using kref
    Suggested-by: Alan Stern <stern@rowland.harvard.edu> for placement
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/core/hub.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/drivers/usb/core/hub.c
    +++ b/drivers/usb/core/hub.c
    @@ -5008,9 +5008,10 @@ static void hub_events(void)

    hub = list_entry(tmp, struct usb_hub, event_list);
    kref_get(&hub->kref);
    + hdev = hub->hdev;
    + usb_get_dev(hdev);
    spin_unlock_irq(&hub_event_lock);

    - hdev = hub->hdev;
    hub_dev = hub->intfdev;
    intf = to_usb_interface(hub_dev);
    dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
    @@ -5123,6 +5124,7 @@ static void hub_events(void)
    usb_autopm_put_interface(intf);
    loop_disconnected:
    usb_unlock_device(hdev);
    + usb_put_dev(hdev);
    kref_put(&hub->kref, hub_release);

    } /* end while (1) */



    \
     
     \ /
      Last update: 2014-10-04 00:21    [W:4.103 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site