Message ID | 20190312090648.30750-1-pkshih@realtek.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 60209d482b97743915883d293c8b85226d230c19 |
Delegated to: | Kalle Valo |
Headers | show |
Series | rtlwifi: fix potential NULL pointer dereference | expand |
Thanks for reporting the cases. There are still a few more such cases; we will report them soon. On 3/12/19 4:06 AM, pkshih@realtek.com wrote: > From: Ping-Ke Shih <pkshih@realtek.com> > > 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> > --- > 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 203e7b574e84..e2e0bfbc24fe 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 18c76990a089..86b1b88cc4ed 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 7c5b54b71a92..67305ce915ec 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 be451a6f7dbe..33481232fad0 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 4d7fa27f55ca..aa56058af56e 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 dc0eb692088f..fe32d397d287 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);
<pkshih@realtek.com> wrote: > From: Ping-Ke Shih <pkshih@realtek.com> > > 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> Patch applied to wireless-drivers-next.git, thanks. 60209d482b97 rtlwifi: fix potential NULL pointer dereference
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/fw.c index 203e7b574e84..e2e0bfbc24fe 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 18c76990a089..86b1b88cc4ed 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 7c5b54b71a92..67305ce915ec 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 be451a6f7dbe..33481232fad0 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 4d7fa27f55ca..aa56058af56e 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 dc0eb692088f..fe32d397d287 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);