summaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/653-0003-rtl8xxxu-Fix-error-handling-if-rtl8xxxu_init_device-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/653-0003-rtl8xxxu-Fix-error-handling-if-rtl8xxxu_init_device-.patch')
-rw-r--r--package/kernel/mac80211/patches/653-0003-rtl8xxxu-Fix-error-handling-if-rtl8xxxu_init_device-.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/653-0003-rtl8xxxu-Fix-error-handling-if-rtl8xxxu_init_device-.patch b/package/kernel/mac80211/patches/653-0003-rtl8xxxu-Fix-error-handling-if-rtl8xxxu_init_device-.patch
new file mode 100644
index 0000000000..d19f48f0eb
--- /dev/null
+++ b/package/kernel/mac80211/patches/653-0003-rtl8xxxu-Fix-error-handling-if-rtl8xxxu_init_device-.patch
@@ -0,0 +1,67 @@
+From deb6176e561324884652dd6a49a862bd8b152959 Mon Sep 17 00:00:00 2001
+From: Jes Sorensen <Jes.Sorensen@redhat.com>
+Date: Fri, 19 Aug 2016 17:46:25 -0400
+Subject: [PATCH] rtl8xxxu: Fix error handling if rtl8xxxu_init_device() fails
+
+For some reason we lost the code bailing if rtl8xxxu_init_device()
+returned an error.
+
+This catches the error and also cleans up the error handling.
+
+Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+---
+ .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 20 +++++++++++++++++---
+ 1 file changed, 17 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
++++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+@@ -5947,7 +5947,7 @@ static int rtl8xxxu_probe(struct usb_int
+ struct ieee80211_hw *hw;
+ struct usb_device *udev;
+ struct ieee80211_supported_band *sband;
+- int ret = 0;
++ int ret;
+ int untested = 1;
+
+ udev = usb_get_dev(interface_to_usbdev(interface));
+@@ -5995,6 +5995,7 @@ static int rtl8xxxu_probe(struct usb_int
+ hw = ieee80211_alloc_hw(sizeof(struct rtl8xxxu_priv), &rtl8xxxu_ops);
+ if (!hw) {
+ ret = -ENOMEM;
++ priv = NULL;
+ goto exit;
+ }
+
+@@ -6043,6 +6044,8 @@ static int rtl8xxxu_probe(struct usb_int
+ }
+
+ ret = rtl8xxxu_init_device(hw);
++ if (ret)
++ goto exit;
+
+ hw->wiphy->max_scan_ssids = 1;
+ hw->wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN;
+@@ -6093,9 +6096,20 @@ static int rtl8xxxu_probe(struct usb_int
+ goto exit;
+ }
+
++ return 0;
++
+ exit:
+- if (ret < 0)
+- usb_put_dev(udev);
++ usb_set_intfdata(interface, NULL);
++
++ if (priv) {
++ kfree(priv->fw_data);
++ mutex_destroy(&priv->usb_buf_mutex);
++ mutex_destroy(&priv->h2c_mutex);
++ }
++ usb_put_dev(udev);
++
++ ieee80211_free_hw(hw);
++
+ return ret;
+ }
+