| From 7a6aca458b5351267e64ed68f96cb556456a91bc Mon Sep 17 00:00:00 2001 |
| From: Ping-Ke Shih <pkshih@realtek.com> |
| Date: Tue, 12 Mar 2019 17:06:48 +0800 |
| Subject: rtlwifi: fix potential NULL pointer dereference |
| |
| [ Upstream commit 60209d482b97743915883d293c8b85226d230c19 ] |
| |
| In case dev_alloc_skb fails, the fix safely returns to avoid |
| potential NULL pointer dereference. |
| |
| Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c | 2 ++ |
| drivers/net/wireless/realtek/rtlwifi/rtl8192c/fw_common.c | 2 ++ |
| drivers/net/wireless/realtek/rtlwifi/rtl8192ee/fw.c | 2 ++ |
| drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c | 2 ++ |
| drivers/net/wireless/realtek/rtlwifi/rtl8723be/fw.c | 2 ++ |
| drivers/net/wireless/realtek/rtlwifi/rtl8821ae/fw.c | 4 ++++ |
| 6 files changed, 14 insertions(+) |
| |
| diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c |
| index 203e7b574e845..e2e0bfbc24fe2 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c |
| @@ -600,6 +600,8 @@ void rtl88e_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished) |
| u1rsvdpageloc, 3); |
| |
| skb = dev_alloc_skb(totalpacketlen); |
| + if (!skb) |
| + return; |
| skb_put_data(skb, &reserved_page_packet, totalpacketlen); |
| |
| rtstatus = rtl_cmd_send_packet(hw, skb); |
| diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192c/fw_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192c/fw_common.c |
| index 18c76990a0898..86b1b88cc4ed8 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192c/fw_common.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192c/fw_common.c |
| @@ -623,6 +623,8 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, |
| u1rsvdpageloc, 3); |
| |
| skb = dev_alloc_skb(totalpacketlen); |
| + if (!skb) |
| + return; |
| skb_put_data(skb, &reserved_page_packet, totalpacketlen); |
| |
| if (cmd_send_packet) |
| diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/fw.c |
| index 7c5b54b71a92f..67305ce915ec4 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/fw.c |
| @@ -744,6 +744,8 @@ void rtl92ee_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished) |
| u1rsvdpageloc, 3); |
| |
| skb = dev_alloc_skb(totalpacketlen); |
| + if (!skb) |
| + return; |
| skb_put_data(skb, &reserved_page_packet, totalpacketlen); |
| |
| rtstatus = rtl_cmd_send_packet(hw, skb); |
| diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c |
| index be451a6f7dbe5..33481232fad01 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c |
| @@ -448,6 +448,8 @@ void rtl8723e_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished) |
| u1rsvdpageloc, 3); |
| |
| skb = dev_alloc_skb(totalpacketlen); |
| + if (!skb) |
| + return; |
| skb_put_data(skb, &reserved_page_packet, totalpacketlen); |
| |
| rtstatus = rtl_cmd_send_packet(hw, skb); |
| diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/fw.c |
| index 4d7fa27f55caa..aa56058af56ef 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/fw.c |
| @@ -562,6 +562,8 @@ void rtl8723be_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, |
| u1rsvdpageloc, sizeof(u1rsvdpageloc)); |
| |
| skb = dev_alloc_skb(totalpacketlen); |
| + if (!skb) |
| + return; |
| skb_put_data(skb, &reserved_page_packet, totalpacketlen); |
| |
| rtstatus = rtl_cmd_send_packet(hw, skb); |
| diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/fw.c |
| index dc0eb692088f6..fe32d397d2875 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/fw.c |
| @@ -1623,6 +1623,8 @@ void rtl8812ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, |
| &reserved_page_packet_8812[0], totalpacketlen); |
| |
| skb = dev_alloc_skb(totalpacketlen); |
| + if (!skb) |
| + return; |
| skb_put_data(skb, &reserved_page_packet_8812, totalpacketlen); |
| |
| rtstatus = rtl_cmd_send_packet(hw, skb); |
| @@ -1759,6 +1761,8 @@ void rtl8821ae_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, |
| &reserved_page_packet_8821[0], totalpacketlen); |
| |
| skb = dev_alloc_skb(totalpacketlen); |
| + if (!skb) |
| + return; |
| skb_put_data(skb, &reserved_page_packet_8821, totalpacketlen); |
| |
| rtstatus = rtl_cmd_send_packet(hw, skb); |
| -- |
| 2.20.1 |
| |