From: Sujith Manoharan <c_manoha@xxxxxxxxxxxxxxxx> Scan completion for drivers that use HW scanning causes a warning to be hit if the interface has been removed. Since cfg80211 ensures that both use-after-free and scheduling a new scan doesn't happen in this case, WARN_ON_ONCE can be used. With ath9k this warning is seen many times when multi-channel-concurrency is enabled. Signed-off-by: Sujith Manoharan <c_manoha@xxxxxxxxxxxxxxxx> --- net/wireless/core.c | 2 +- net/wireless/scan.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/net/wireless/core.c b/net/wireless/core.c index f52a4cd..2be08e8 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c @@ -931,7 +931,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb, case NETDEV_DOWN: cfg80211_update_iface_num(rdev, wdev->iftype, -1); if (rdev->scan_req && rdev->scan_req->wdev == wdev) { - if (WARN_ON(!rdev->scan_req->notified)) + if (WARN_ON_ONCE(!rdev->scan_req->notified)) rdev->scan_req->aborted = true; ___cfg80211_scan_done(rdev, false); } diff --git a/net/wireless/scan.c b/net/wireless/scan.c index bda39f1..c0fc0b3 100644 --- a/net/wireless/scan.c +++ b/net/wireless/scan.c @@ -239,7 +239,7 @@ void __cfg80211_scan_done(struct work_struct *wk) void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted) { trace_cfg80211_scan_done(request, aborted); - WARN_ON(request != wiphy_to_rdev(request->wiphy)->scan_req); + WARN_ON_ONCE(request != wiphy_to_rdev(request->wiphy)->scan_req); request->aborted = aborted; request->notified = true; -- 2.1.2 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html