lkml.org 
[lkml]   [2019]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 243/306] cfg80211: Prevent regulatory restore during STA disconnect in concurrent interfaces
    Date
    From: Sriram R <srirrama@codeaurora.org>

    [ Upstream commit 113f3aaa81bd56aba02659786ed65cbd9cb9a6fc ]

    Currently when an AP and STA interfaces are active in the same or different
    radios, regulatory settings are restored whenever the STA disconnects. This
    restores all channel information including dfs states in all radios.
    For example, if an AP interface is active in one radio and STA in another,
    when radar is detected on the AP interface, the dfs state of the channel
    will be changed to UNAVAILABLE. But when the STA interface disconnects,
    this issues a regulatory disconnect hint which restores all regulatory
    settings in all the radios attached and thereby losing the stored dfs
    state on the other radio where the channel was marked as unavailable
    earlier. Hence prevent such regulatory restore whenever another active
    beaconing interface is present in the same or other radios.

    Signed-off-by: Sriram R <srirrama@codeaurora.org>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/wireless/sme.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    diff --git a/net/wireless/sme.c b/net/wireless/sme.c
    index d536b07582f8c..c7047c7b4e80f 100644
    --- a/net/wireless/sme.c
    +++ b/net/wireless/sme.c
    @@ -642,11 +642,15 @@ static bool cfg80211_is_all_idle(void)
    * All devices must be idle as otherwise if you are actively
    * scanning some new beacon hints could be learned and would
    * count as new regulatory hints.
    + * Also if there is any other active beaconing interface we
    + * need not issue a disconnect hint and reset any info such
    + * as chan dfs state, etc.
    */
    list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
    list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) {
    wdev_lock(wdev);
    - if (wdev->conn || wdev->current_bss)
    + if (wdev->conn || wdev->current_bss ||
    + cfg80211_beaconing_iface_active(wdev))
    is_all_idle = false;
    wdev_unlock(wdev);
    }
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-11-27 22:05    [W:3.242 / U:0.468 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site