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>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
6161ae5f1f
commit
471e42ad14
@@ -271,6 +271,8 @@ static inline u8 wusb_key_index(int index, int type, int originator)
|
||||
#define WUSB_KEY_INDEX_TYPE_GTK 2
|
||||
#define WUSB_KEY_INDEX_ORIGINATOR_HOST 0
|
||||
#define WUSB_KEY_INDEX_ORIGINATOR_DEVICE 1
|
||||
/* bits 0-3 used for the key index. */
|
||||
#define WUSB_KEY_INDEX_MAX 15
|
||||
|
||||
/* A CCM Nonce, defined in WUSB1.0[6.4.1] */
|
||||
struct aes_ccm_nonce {
|
||||
|
Reference in New Issue
Block a user