Patch "brcmfmac: use local iftype avoiding use-after-free of virtual interface" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
brcmfmac: use local iftype avoiding use-after-free of virtual interface
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
brcmfmac-use-local-iftype-avoiding-use-after-free-of-virtual-interface.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
d77facb88448cdeaaa3adba5b9704a48ac2ac8d6Mon Sep 17 00:00:00 2001
From: Arend Van Spriel <[email protected]>
Date: Tue, 28 Mar 2017 09:11:30 +0100
Subject: brcmfmac: use local iftype avoiding use-after-free of virtual interface
From: Arend Van Spriel <[email protected]>
commit d77facb88448cdeaaa3adba5b9704a48ac2ac8d6 upstream.
A use-after-free was found using KASAN. In brcmf_p2p_del_if() the virtual interface is removed using call to brcmf_remove_interface(). After that the virtual interface instance has been freed and should not be referenced. Solve this by storing the nl80211 iftype in local variable, which is used in a couple of places anyway.
--- drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c +5 -3
@@ -2238,14 +2238,16 @@ int brcmf_p2p_del_vif(struct wiphy *wiphstruct brcmf_cfg80211_info *cfg =wiphy_priv (wiphy);struct brcmf_p2p_info *p2p = &cfg->p2p;struct brcmf_cfg80211_vif *vif; +enum nl80211_iftype iftype;bool wait_for_disable = false;int err;brcmf_dbg (TRACE ,"delete P2P vif\n" ); vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev); + iftype = vif->wdev.iftype;brcmf_cfg80211_arm_vif_event (cfg, vif); -switch (vif->wdev.iftype) { +switch (iftype) {case NL80211_IFTYPE_P2P_CLIENT :if (test_bit (BRCMF_VIF_STATUS_DISCONNECTING , &vif->sme_state)) wait_for_disable = true;
@@ -2275,7 +2277,7 @@ int brcmf_p2p_del_vif(struct wiphy *wiph BRCMF_P2P_DISABLE_TIMEOUT); err =0 ; -if (vif->wdev.iftype !=NL80211_IFTYPE_P2P_DEVICE ) { +if (iftype !=NL80211_IFTYPE_P2P_DEVICE ) {brcmf_vif_clear_mgmt_ies (vif); err =brcmf_p2p_release_p2p_if (vif); }
@@ -2291,7 +2293,7 @@ int brcmf_p2p_del_vif(struct wiphy *wiphbrcmf_remove_interface (vif->ifp, true);brcmf_cfg80211_arm_vif_event (cfg,NULL ); -if (vif->wdev.iftype !=NL80211_IFTYPE_P2P_DEVICE ) +if (iftype !=NL80211_IFTYPE_P2P_DEVICE ) p2p->bss_idx[P2PAPI_BSSCFG_CONNECTION ].vif =NULL ;return err;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/cfg80211-check-rdev-resume-callback-only-for-registered-wiphy.patch queue-4.9/brcmfmac-use-local-iftype-avoiding-use-after-free-of-virtual-interface.patch