]> git.hungrycats.org Git - linux/commitdiff
rtlwifi: Fix memory leak when firmware request fails
authorSouptick Joarder <jrdr.linux@gmail.com>
Wed, 5 Jul 2017 14:25:06 +0000 (19:55 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 9 Sep 2017 15:39:35 +0000 (17:39 +0200)
commit f2764f61fa10593204b0c5e4e9a68dba02112e50 upstream.

This patch will fix memory leak when firmware request fails

Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
Acked-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Cc: Sven Joachim <svenjoac@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c

index 7661cfa5303209dda82d67b29bca3d9d046427cc..37489b43bb239b2e57746f489399642aa6e31398 100644 (file)
@@ -175,6 +175,8 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
                                      rtl_fw_cb);
        if (err) {
                pr_info("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
index bcbb0c60f1f12bc9d1cd706510d5a97dbc5e3ae3..38f85bfdf0c772713de9eb5db68bf73307a6e333 100644 (file)
@@ -176,6 +176,8 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw)
                                      rtl_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
index 96c923b3feb4cdbf6317cd3e6b3371c5e7f37b17..e3eb850bb1de3915146944a7b3502385782a163c 100644 (file)
@@ -85,6 +85,10 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
        err = request_firmware_nowait(THIS_MODULE, 1,
                                      fw_name, rtlpriv->io.dev,
                                      GFP_KERNEL, hw, rtl_fw_cb);
+       if (err) {
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
+       }
        return err;
 }
 
index 16132c66e5e1b37db21d0cd81163f8c38152ee3e..e38d6f7370aa65fdf48d66804ddf43003c7f4be5 100644 (file)
@@ -183,6 +183,8 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw)
                                      rtl_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
index 48820bc497d805716a6c0f018feaf8fad97d8917..6f2d1f053ecdf95f6d91a46fd08f45362fa37abe 100644 (file)
@@ -177,6 +177,8 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw)
                                      rtl_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
index 2006b09ea74ffac4888e2700f72329e8630d48a7..1ec20efb9ce12ef960b241b94748649b3f24a285 100644 (file)
@@ -216,6 +216,8 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw)
                                      rtl92se_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
index 7bf9f255792048b9a03a8b6a6117f77c51bd5535..aab86667a7f3a3b14b44ed0f150869ed99357d9f 100644 (file)
@@ -184,6 +184,8 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw)
                                      rtl_fw_cb);
        if (err) {
                pr_err("Failed to request firmware!\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
        return 0;
index 8c0ac96b543005efe8348b7f09dfa4f2be725e90..b7a5f9274b468ad8458508d1805ae4f509d0ad1e 100644 (file)
@@ -195,6 +195,8 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)
                                              rtl_fw_cb);
                if (err) {
                        pr_err("Failed to request firmware!\n");
+                       vfree(rtlpriv->rtlhal.pfirmware);
+                       rtlpriv->rtlhal.pfirmware = NULL;
                        return 1;
                }
        }
index abaf34cb14331487d8bd3ad789ea5450148d74f4..5272fb49f8e1edc2d75dc7f7684fe0e9a71486a1 100644 (file)
@@ -196,6 +196,8 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
        rtlpriv->rtlhal.wowlan_firmware = vzalloc(0x8000);
        if (!rtlpriv->rtlhal.wowlan_firmware) {
                pr_err("Can't alloc buffer for wowlan fw.\n");
+               vfree(rtlpriv->rtlhal.pfirmware);
+               rtlpriv->rtlhal.pfirmware = NULL;
                return 1;
        }
 
@@ -222,6 +224,8 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
                                              rtl_fw_cb);
                if (err) {
                        pr_err("Failed to request normal firmware!\n");
+                       vfree(rtlpriv->rtlhal.wowlan_firmware);
+                       vfree(rtlpriv->rtlhal.pfirmware);
                        return 1;
                }
        }
@@ -233,6 +237,8 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
                                      rtl_wowlan_fw_cb);
        if (err) {
                pr_err("Failed to request wowlan firmware!\n");
+               vfree(rtlpriv->rtlhal.wowlan_firmware);
+               vfree(rtlpriv->rtlhal.pfirmware);
                return 1;
        }
        return 0;