diff mbox series

mwifiex: fix potential NULL dereference and use after free

Message ID 1543487119-92033-1-git-send-email-bianpan2016@163.com (mailing list archive)
State Accepted
Commit 1dcd9429212b98bea87fc6ec92fb50bf5953eb47
Delegated to: Kalle Valo
Headers show
Series mwifiex: fix potential NULL dereference and use after free | expand

Commit Message

Pan Bian Nov. 29, 2018, 10:25 a.m. UTC
There are two defects: (1) passing a NULL bss to
mwifiex_save_hidden_ssid_channels will result in NULL dereference,
(2) using bss after dropping the reference to it via cfg80211_put_bss.
To fix them, the patch moves the buggy code to the branch that bss is
not NULL and puts it before cfg80211_put_bss.

Signed-off-by: Pan Bian <bianpan2016@163.com>
---
 drivers/net/wireless/marvell/mwifiex/scan.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

Comments

Kalle Valo Dec. 13, 2018, 2:54 p.m. UTC | #1
Pan Bian <bianpan2016@163.com> wrote:

> There are two defects: (1) passing a NULL bss to
> mwifiex_save_hidden_ssid_channels will result in NULL dereference,
> (2) using bss after dropping the reference to it via cfg80211_put_bss.
> To fix them, the patch moves the buggy code to the branch that bss is
> not NULL and puts it before cfg80211_put_bss.
> 
> Signed-off-by: Pan Bian <bianpan2016@163.com>

Patch applied to wireless-drivers-next.git, thanks.

1dcd9429212b mwifiex: fix potential NULL dereference and use after free
diff mbox series

Patch

diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c
index 8e483b0..dfe2cf0 100644
--- a/drivers/net/wireless/marvell/mwifiex/scan.c
+++ b/drivers/net/wireless/marvell/mwifiex/scan.c
@@ -1882,15 +1882,17 @@  mwifiex_parse_single_response_buf(struct mwifiex_private *priv, u8 **bss_info,
 					    ETH_ALEN))
 					mwifiex_update_curr_bss_params(priv,
 								       bss);
-				cfg80211_put_bss(priv->wdev.wiphy, bss);
-			}
 
-			if ((chan->flags & IEEE80211_CHAN_RADAR) ||
-			    (chan->flags & IEEE80211_CHAN_NO_IR)) {
-				mwifiex_dbg(adapter, INFO,
-					    "radar or passive channel %d\n",
-					    channel);
-				mwifiex_save_hidden_ssid_channels(priv, bss);
+				if ((chan->flags & IEEE80211_CHAN_RADAR) ||
+				    (chan->flags & IEEE80211_CHAN_NO_IR)) {
+					mwifiex_dbg(adapter, INFO,
+						    "radar or passive channel %d\n",
+						    channel);
+					mwifiex_save_hidden_ssid_channels(priv,
+									  bss);
+				}
+
+				cfg80211_put_bss(priv->wdev.wiphy, bss);
 			}
 		}
 	} else {