• Jonas Dreßler's avatar
    mwifiex: Update virtual interface counters right after setting bss_type · fae2aac8
    Jonas Dreßler authored
    In mwifiex_init_new_priv_params() we update our private driver state to
    reflect the currently selected virtual interface type. Most notably we
    set the bss_mode to the mode we're going to put the firmware in.
    
    Now after we updated the driver state we actually start talking to the
    firmware and instruct it to set up the new mode. Those commands can and
    will sometimes fail, in which case we return with an error from
    mwifiex_change_vif_to_*. We currently update our virtual interface type
    counters after this return, which means the code is never reached when a
    firmware error happens and we never update the counters. Since we have
    updated our bss_mode earlier though, the counters now no longer reflect
    the actual state of the driver.
    
    This will break things on the next virtual interface change, because the
    virtual interface type we're switching away from didn't get its counter
    incremented, and we end up decrementing a 0-counter.
    
    To fix this, simply update the virtual interface type counters right
    after updating our driver structures, so that they are always in sync.
    Signed-off-by: default avatarJonas Dreßler <verdre@v0yd.nl>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/20210914195909.36035-6-verdre@v0yd.nl
    fae2aac8
cfg80211.c 123 KB