summaryrefslogtreecommitdiffstats
path: root/drivers/pps
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2015-12-16 13:32:38 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-12-18 09:30:34 -0800
commite50293ef9775c5f1cf3fcc093037dd6a8c5684ea (patch)
tree01a8506d548f2bc1615a60e5aae2293abfd6c986 /drivers/pps
parentabdc9a3b4bac97add99e1d77dc6d28623afe682b (diff)
downloadlinux-e50293ef9775c5f1cf3fcc093037dd6a8c5684ea.tar.bz2
USB: fix invalid memory access in hub_activate()
Commit 8520f38099cc ("USB: change hub initialization sleeps to delayed_work") changed the hub_activate() routine to make part of it run in a workqueue. However, the commit failed to take a reference to the usb_hub structure or to lock the hub interface while doing so. As a result, if a hub is plugged in and quickly unplugged before the work routine can run, the routine will try to access memory that has been deallocated. Or, if the hub is unplugged while the routine is running, the memory may be deallocated while it is in active use. This patch fixes the problem by taking a reference to the usb_hub at the start of hub_activate() and releasing it at the end (when the work is finished), and by locking the hub interface while the work routine is running. It also adds a check at the start of the routine to see if the hub has already been disconnected, in which nothing should be done. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Reported-by: Alexandru Cornea <alexandru.cornea@intel.com> Tested-by: Alexandru Cornea <alexandru.cornea@intel.com> Fixes: 8520f38099cc ("USB: change hub initialization sleeps to delayed_work") CC: <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/pps')
0 files changed, 0 insertions, 0 deletions