lkml.org 
[lkml]   [2019]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 237/237] cfg80211: call disconnect_wk when AP stops
    Date
    From: Johannes Berg <johannes.berg@intel.com>

    [ Upstream commit e005bd7ddea06784c1eb91ac5bb6b171a94f3b05 ]

    Since we now prevent regulatory restore during STA disconnect
    if concurrent AP interfaces are active, we need to reschedule
    this check when the AP state changes. This fixes never doing
    a restore when an AP is the last interface to stop. Or to put
    it another way: we need to re-check after anything we check
    here changes.

    Cc: stable@vger.kernel.org
    Fixes: 113f3aaa81bd ("cfg80211: Prevent regulatory restore during STA disconnect in concurrent interfaces")
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/wireless/ap.c | 2 ++
    net/wireless/core.h | 2 ++
    net/wireless/sme.c | 2 +-
    3 files changed, 5 insertions(+), 1 deletion(-)

    diff --git a/net/wireless/ap.c b/net/wireless/ap.c
    index 882d97bdc6bfd..550ac9d827fe7 100644
    --- a/net/wireless/ap.c
    +++ b/net/wireless/ap.c
    @@ -41,6 +41,8 @@ int __cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
    cfg80211_sched_dfs_chan_update(rdev);
    }

    + schedule_work(&cfg80211_disconnect_work);
    +
    return err;
    }

    diff --git a/net/wireless/core.h b/net/wireless/core.h
    index 7f52ef5693203..f5d58652108dd 100644
    --- a/net/wireless/core.h
    +++ b/net/wireless/core.h
    @@ -430,6 +430,8 @@ void cfg80211_process_wdev_events(struct wireless_dev *wdev);
    bool cfg80211_does_bw_fit_range(const struct ieee80211_freq_range *freq_range,
    u32 center_freq_khz, u32 bw_khz);

    +extern struct work_struct cfg80211_disconnect_work;
    +
    /**
    * cfg80211_chandef_dfs_usable - checks if chandef is DFS usable
    * @wiphy: the wiphy to validate against
    diff --git a/net/wireless/sme.c b/net/wireless/sme.c
    index c7047c7b4e80f..07c2196e9d573 100644
    --- a/net/wireless/sme.c
    +++ b/net/wireless/sme.c
    @@ -667,7 +667,7 @@ static void disconnect_work(struct work_struct *work)
    rtnl_unlock();
    }

    -static DECLARE_WORK(cfg80211_disconnect_work, disconnect_work);
    +DECLARE_WORK(cfg80211_disconnect_work, disconnect_work);


    /*
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-16 17:16    [W:2.269 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site