mwifiex: usb: kill urb before free its memory
authorXinming Hu <huxm@marvell.com>
Tue, 23 May 2017 07:12:31 +0000 (07:12 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 31 May 2017 13:54:08 +0000 (16:54 +0300)
we have observed host system hang when device firmware crash,
stack trace show it was an use-after-free case: previous submitted
urb will be holding in usbcore, and given back to device driver
when device disconnected, while the urb have been freed in usb
device disconnect handler. This patch kill the holding urb before
free its memory.

Signed-off-by: Xinming Hu <huxm@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/marvell/mwifiex/usb.c

index debd6216366ab16155ab4f004e81b26b6f8f9ca1..9c3d654ae009e4baa183c9133ee8d52fc0610ea1 100644 (file)
@@ -363,6 +363,7 @@ static void mwifiex_usb_free(struct usb_card_rec *card)
        for (i = 0; i < MWIFIEX_TX_DATA_PORT; i++) {
                port = &card->port[i];
                for (j = 0; j < MWIFIEX_TX_DATA_URB; j++) {
+                       usb_kill_urb(port->tx_data_list[j].urb);
                        usb_free_urb(port->tx_data_list[j].urb);
                        port->tx_data_list[j].urb = NULL;
                }