• Johannes Berg's avatar
    cfg80211: initialize wdev data earlier · 9bdaf3b9
    Johannes Berg authored
    There's a race condition in the netdev registration in that
    NETDEV_REGISTER actually happens after the netdev is available,
    and so if we initialize things only there, we might get called
    with an uninitialized wdev through nl80211 - not using a wdev
    but using a netdev interface index.
    
    I found this while looking into a syzbot report, but it doesn't
    really seem to be related, and unfortunately there's no repro
    for it (yet). I can't (yet) explain how it managed to get into
    cfg80211_release_pmsr() from nl80211_netlink_notify() without
    the wdev having been initialized, as the latter only iterates
    the wdevs that are linked into the rdev, which even without the
    change here happened after init.
    
    However, looking at this, it seems fairly clear that the init
    needs to be done earlier, otherwise we might even re-init on a
    netns move, when data might still be pending.
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    Link: https://lore.kernel.org/r/20201009135821.fdcbba3aad65.Ie9201d91dbcb7da32318812effdc1561aeaf4cdc@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    9bdaf3b9
nl80211.c 482 KB