Message ID | 20210313143635.109154-1-hdegoede@redhat.com (mailing list archive) |
---|---|
State | Accepted |
Commit | bd83a2fc05ed323d7ae38443a6d2e253ef1c4237 |
Delegated to: | Kalle Valo |
Headers | show |
Series | [5.12,regression,fix] brcmfmac: p2p: Fix recently introduced deadlock issue | expand |
On Sat, 2021-03-13 at 15:36 +0100, Hans de Goede wrote: > Commit a05829a7222e ("cfg80211: avoid holding the RTNL when calling the > driver") replaced the rtnl_lock parameter passed to various brcmf > functions with just lock, because since that commit it is not just > about the rtnl_lock but also about the wiphy_lock . > > During this search/replace the "if (!rtnl_locked)" check in brcmfmac/p2p.c > was accidentally replaced with "if (locked)", dropping the inversion of > the check. This causes the code to now call rtnl_lock() while already > holding the lock, causing a deadlock. > > Add back the "!" to the if-condition to fix this. Ouch, sorry about that, and thanks for the fix! johannes
Hans de Goede <hdegoede@redhat.com> wrote: > Commit a05829a7222e ("cfg80211: avoid holding the RTNL when calling the > driver") replaced the rtnl_lock parameter passed to various brcmf > functions with just lock, because since that commit it is not just > about the rtnl_lock but also about the wiphy_lock . > > During this search/replace the "if (!rtnl_locked)" check in brcmfmac/p2p.c > was accidentally replaced with "if (locked)", dropping the inversion of > the check. This causes the code to now call rtnl_lock() while already > holding the lock, causing a deadlock. > > Add back the "!" to the if-condition to fix this. > > Cc: Johannes Berg <johannes.berg@intel.com> > Fixes: a05829a7222e ("cfg80211: avoid holding the RTNL when calling the driver") > Signed-off-by: Hans de Goede <hdegoede@redhat.com> Patch applied to wireless-drivers.git, thanks. bd83a2fc05ed brcmfmac: p2p: Fix recently introduced deadlock issue
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c index 6d30a0fcecea..34cd8a7401fe 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c @@ -2439,7 +2439,7 @@ void brcmf_p2p_ifp_removed(struct brcmf_if *ifp, bool locked) vif = ifp->vif; cfg = wdev_to_cfg(&vif->wdev); cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif = NULL; - if (locked) { + if (!locked) { rtnl_lock(); wiphy_lock(cfg->wiphy); cfg80211_unregister_wdev(&vif->wdev);
Commit a05829a7222e ("cfg80211: avoid holding the RTNL when calling the driver") replaced the rtnl_lock parameter passed to various brcmf functions with just lock, because since that commit it is not just about the rtnl_lock but also about the wiphy_lock . During this search/replace the "if (!rtnl_locked)" check in brcmfmac/p2p.c was accidentally replaced with "if (locked)", dropping the inversion of the check. This causes the code to now call rtnl_lock() while already holding the lock, causing a deadlock. Add back the "!" to the if-condition to fix this. Cc: Johannes Berg <johannes.berg@intel.com> Fixes: a05829a7222e ("cfg80211: avoid holding the RTNL when calling the driver") Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)