usb: wusbcore: fix deadlock in wusbhc_gtk_rekey
authorThomas Pugliese <thomas.pugliese@gmail.com>
Mon, 2 Dec 2013 21:39:45 +0000 (15:39 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 2 Dec 2013 23:21:04 +0000 (15:21 -0800)
commit471e42ad148c05d091219096726d751684ebf918
tree407fba0caeb3d553f86c8de029a9f34da39e03d1
parent6161ae5f1f371e8ff52306d9a1893f5dec6f60a4
usb: wusbcore: fix deadlock in wusbhc_gtk_rekey

When multiple wireless USB devices are connected and one of the devices
disconnects, the host will distribute a new group key to the remaining
devicese using wusbhc_gtk_rekey.  wusbhc_gtk_rekey takes the
wusbhc->mutex and holds it while it submits a URB to set the new key.
This causes a deadlock in wa_urb_enqueue when it calls a device lookup
helper function that takes the same lock.

This patch changes wusbhc_gtk_rekey to submit a work item to set the GTK
so that the URB is submitted without holding wusbhc->mutex.

Signed-off-by: Thomas Pugliese <thomas.pugliese@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/wusbcore/devconnect.c
drivers/usb/wusbcore/security.c
drivers/usb/wusbcore/wusbhc.h
include/linux/usb/wusb.h