• Johannes Berg's avatar
    mac80211: fix deadlock in AP/VLAN handling · d5befb22
    Johannes Berg authored
    Syzbot reports that when you have AP_VLAN interfaces that are up
    and close the AP interface they belong to, we get a deadlock. No
    surprise - since we dev_close() them with the wiphy mutex held,
    which goes back into the netdev notifier in cfg80211 and tries to
    acquire the wiphy mutex there.
    
    To fix this, we need to do two things:
     1) prevent changing iftype while AP_VLANs are up, we can't
        easily fix this case since cfg80211 already calls us with
        the wiphy mutex held, but change_interface() is relatively
        rare in drivers anyway, so changing iftype isn't used much
        (and userspace has to fall back to down/change/up anyway)
     2) pull the dev_close() loop over VLANs out of the wiphy mutex
        section in the normal stop case
    
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+452ea4fbbef700ff0a56@syzkaller.appspotmail.com
    Fixes: a05829a7 ("cfg80211: avoid holding the RTNL when calling the driver")
    Link: https://lore.kernel.org/r/20210517160322.9b8f356c0222.I392cb0e2fa5a1a94cf2e637555d702c7e512c1ff@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    d5befb22
iface.c 55.6 KB