Patch "rtlwifi: rtl_usb: Fix for URB leaking when doing ifconfig up/down" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
rtlwifi: rtl_usb: Fix for URB leaking when doing ifconfig up/down
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
rtlwifi-rtl_usb-fix-for-urb-leaking-when-doing-ifconfig-up-down.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
575ddce0507789bf9830d089557d2199d2f91865Mon Sep 17 00:00:00 2001
From: Michael Schenk <[email protected]>
Date: Thu, 26 Jan 2017 11:25:04 -0600
Subject: rtlwifi: rtl_usb: Fix for URB leaking when doing ifconfig up/down
From: Michael Schenk <[email protected]>
commit 575ddce0507789bf9830d089557d2199d2f91865 upstream.
In the function rtl_usb_start we pre-allocate a certain number of urbs for RX path but they will not be freed when calling rtl_usb_stop. This results in leaking urbs when doing ifconfig up and down. Eventually, the system has no available urbs.
--- drivers/net/wireless/realtek/rtlwifi/usb.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
drivers/net/wireless/realtek/rtlwifi/usb.c +18 -0
@@ -834,12 +834,30 @@ static void rtl_usb_stop(struct ieee8021struct rtl_priv *rtlpriv =rtl_priv (hw);struct rtl_hal *rtlhal =rtl_hal (rtl_priv (hw));struct rtl_usb *rtlusb =rtl_usbdev (rtl_usbpriv (hw)); +struct urb *urb;/* should after adapter start and interrupt enable. */ set_hal_stop (rtlhal);cancel_work_sync (&rtlpriv->works.fill_h2c_cmd);/* Enable software */ SET_USB_STOP (rtlusb); + +/* free pre-allocated URBs from rtl_usb_start() */ +usb_kill_anchored_urbs (&rtlusb->rx_submitted); + +tasklet_kill (&rtlusb->rx_work_tasklet); +cancel_work_sync (&rtlpriv->works.lps_change_work); + +flush_workqueue (rtlpriv->works.rtl_wq); + +skb_queue_purge (&rtlusb->rx_queue); + +while ((urb =usb_get_from_anchor (&rtlusb->rx_cleanup_urbs))) { +usb_free_coherent (urb->dev, urb->transfer_buffer_length, + urb->transfer_buffer, urb->transfer_dma); +usb_free_urb (urb); + } + rtlpriv->cfg->ops->hw_disable (hw); }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/rtlwifi-rtl_usb-fix-for-urb-leaking-when-doing-ifconfig-up-down.patch