143 lines
4.8 KiB
Diff
143 lines
4.8 KiB
Diff
|
From: Souptick Joarder <jrdr.linux@gmail.com>
|
||
|
Date: Wed, 5 Jul 2017 19:55:06 +0530
|
||
|
Subject: rtlwifi: Fix memory leak when firmware request fails
|
||
|
Origin: https://git.kernel.org/linus/f2764f61fa10593204b0c5e4e9a68dba02112e50
|
||
|
Bug-Debian: https://bugs.debian.org/869084
|
||
|
|
||
|
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>
|
||
|
---
|
||
|
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c | 2 ++
|
||
|
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c | 2 ++
|
||
|
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c | 4 ++++
|
||
|
drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c | 2 ++
|
||
|
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c | 2 ++
|
||
|
drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c | 2 ++
|
||
|
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c | 2 ++
|
||
|
drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 2 ++
|
||
|
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 6 ++++++
|
||
|
9 files changed, 24 insertions(+)
|
||
|
|
||
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||
|
@@ -175,6 +175,8 @@ int rtl88e_init_sw_vars(struct ieee80211
|
||
|
rtl_fw_cb);
|
||
|
if (err) {
|
||
|
pr_info("Failed to request firmware!\n");
|
||
|
+ vfree(rtlpriv->rtlhal.pfirmware);
|
||
|
+ rtlpriv->rtlhal.pfirmware = NULL;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
|
||
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
|
||
|
@@ -176,6 +176,8 @@ int rtl92c_init_sw_vars(struct ieee80211
|
||
|
rtl_fw_cb);
|
||
|
if (err) {
|
||
|
pr_err("Failed to request firmware!\n");
|
||
|
+ vfree(rtlpriv->rtlhal.pfirmware);
|
||
|
+ rtlpriv->rtlhal.pfirmware = NULL;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||
|
@@ -85,6 +85,10 @@ static int rtl92cu_init_sw_vars(struct i
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||
|
@@ -183,6 +183,8 @@ static int rtl92d_init_sw_vars(struct ie
|
||
|
rtl_fw_cb);
|
||
|
if (err) {
|
||
|
pr_err("Failed to request firmware!\n");
|
||
|
+ vfree(rtlpriv->rtlhal.pfirmware);
|
||
|
+ rtlpriv->rtlhal.pfirmware = NULL;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
|
||
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
|
||
|
@@ -177,6 +177,8 @@ int rtl92ee_init_sw_vars(struct ieee8021
|
||
|
rtl_fw_cb);
|
||
|
if (err) {
|
||
|
pr_err("Failed to request firmware!\n");
|
||
|
+ vfree(rtlpriv->rtlhal.pfirmware);
|
||
|
+ rtlpriv->rtlhal.pfirmware = NULL;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
||
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
||
|
@@ -215,6 +215,8 @@ static int rtl92s_init_sw_vars(struct ie
|
||
|
rtl92se_fw_cb);
|
||
|
if (err) {
|
||
|
pr_err("Failed to request firmware!\n");
|
||
|
+ vfree(rtlpriv->rtlhal.pfirmware);
|
||
|
+ rtlpriv->rtlhal.pfirmware = NULL;
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
|
||
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
|
||
|
@@ -184,6 +184,8 @@ int rtl8723e_init_sw_vars(struct ieee802
|
||
|
rtl_fw_cb);
|
||
|
if (err) {
|
||
|
pr_err("Failed to request firmware!\n");
|
||
|
+ vfree(rtlpriv->rtlhal.pfirmware);
|
||
|
+ rtlpriv->rtlhal.pfirmware = NULL;
|
||
|
return 1;
|
||
|
}
|
||
|
return 0;
|
||
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
||
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
||
|
@@ -195,6 +195,8 @@ int rtl8723be_init_sw_vars(struct ieee80
|
||
|
rtl_fw_cb);
|
||
|
if (err) {
|
||
|
pr_err("Failed to request firmware!\n");
|
||
|
+ vfree(rtlpriv->rtlhal.pfirmware);
|
||
|
+ rtlpriv->rtlhal.pfirmware = NULL;
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
||
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
||
|
@@ -196,6 +196,8 @@ int rtl8821ae_init_sw_vars(struct ieee80
|
||
|
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 ieee80
|
||
|
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 ieee80
|
||
|
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;
|