| From 0a3ca16ea75c1fea5329445fb2bedcbc1c626e04 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 63874512598bb..b5f91c994c798 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c |
| @@ -622,6 +622,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 f3bff66e85d0c..81ec0e6e07c1f 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192c/fw_common.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192c/fw_common.c |
| @@ -646,6 +646,8 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, |
| |
| |
| 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 84a0d0eb72e1e..a933490928ba9 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/fw.c |
| @@ -766,6 +766,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 bf9859f74b6f5..52f108744e969 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c |
| @@ -470,6 +470,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 f2441fbb92f1e..307c2bd77f060 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/fw.c |
| @@ -584,6 +584,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 d868a034659fb..d7235f6165fdf 100644 |
| --- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/fw.c |
| +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/fw.c |
| @@ -1645,6 +1645,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); |
| @@ -1781,6 +1783,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 |
| |