Received: by 2002:a17:90a:88:0:0:0:0 with SMTP id a8csp58374pja; Fri, 22 Nov 2019 03:25:34 -0800 (PST) X-Google-Smtp-Source: APXvYqyxpL7jjpylG7IZiQ7292IO49UFMc+bBdAJeQXRQBNZeUV0PXBiqKxsCMWXYq3niVF0RHhm X-Received: by 2002:a17:906:3786:: with SMTP id n6mr5448562ejc.124.1574421933879; Fri, 22 Nov 2019 03:25:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574421933; cv=none; d=google.com; s=arc-20160816; b=oveAzU2qf0QF6TK5/L+iPvZe4ounTo5Ca1OJ/5CRqa6fCzROe70hUfBv2MR8jSPjRb vOGGK96ZdztVdPwg1K6E9wO8ll58TvtXSPrnE8XpyrEHD8E4grXrGnFCowM0/VgLJ26E XrcYS5RQm8hn1T9lpyzIOK7c2aB6iScvh5yVPwFqMQHjF2JICRfhY7JGtEeDWcDgbmOQ M1k+E92AmE5qvGKhAKOCrp/seSh9TMI90k8Nd3Vie3E3wErCCkZ19+Upr1XAZMqyUFHW +5N77fitq3As/RQs9NFk8DMpz52rOckLFzjhiVpO4buWOlGzgAtjysCN7mga7nqIm9YN QAoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=s0QyPK4UFUtzQcuN9ca3L3JyOL3mUDY6EmBDSKcjxnQ=; b=hcVtKepRmccE0q+AuM2pI5GXKIwoHltA5LyjvpbCo1B7TSaKbUVVVn7es361C6Acry ny/TyAospK3JmLKyyM7ujaVNTMAVlmU2U/RKREyz/dULVPTG8fYkx1h+c+T724hvf5MQ XVNljv0zEIozqTEwoQit9wtJk/9+ox/T/SaW8Dc6uje3sr8WBvFwnL1bmcM6j3AnUul+ Q1wyHHRGBhk51OyD9lccg7Lc4lhwI0ImVULGjEy5wPlaVVbOyNISxekrD3B2hdwHWh/k ef90dYm7il3IADSdeh0czzFzAkM9jmvJ27JYsAqMKo0CLhTzeVut8U3i70EQWBWERLib cABw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=mZnSUznm; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u24si3724258ejb.93.2019.11.22.03.25.10; Fri, 22 Nov 2019 03:25:33 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=mZnSUznm; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728203AbfKVLXC (ORCPT + 99 others); Fri, 22 Nov 2019 06:23:02 -0500 Received: from mail.kernel.org ([198.145.29.99]:47172 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728564AbfKVKmO (ORCPT ); Fri, 22 Nov 2019 05:42:14 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5DB9E20715; Fri, 22 Nov 2019 10:42:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574419332; bh=mhHN88vt379iosWB8gbGNyPhtscPz6r7O0iId8KiFuE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mZnSUznmaA4l6ttln231FYTVIqlNTWyphbISEfpRT9HczuK8QWXRSjnl+HD+SCT8q 68b9DNeU8lxzfzUBIKKmwVw4WTrG6DrbCQL8G0OX367F5x0YLyBq/um/5yccLMuNW5 urZbRlQDs8Gs3jgy5vFHLn3ZIQDsp1g7CxT3PAHg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Rajeev Kumar Sirasanagandla , Johannes Berg , Sasha Levin Subject: [PATCH 4.9 021/222] cfg80211: Avoid regulatory restore when COUNTRY_IE_IGNORE is set Date: Fri, 22 Nov 2019 11:26:01 +0100 Message-Id: <20191122100836.916233887@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191122100830.874290814@linuxfoundation.org> References: <20191122100830.874290814@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Rajeev Kumar Sirasanagandla [ Upstream commit 7417844b63d4b0dc8ab23f88259bf95de7d09b57 ] When REGULATORY_COUNTRY_IE_IGNORE is set, __reg_process_hint_country_ie() ignores the country code change request from __cfg80211_connect_result() via regulatory_hint_country_ie(). After Disconnect, similar to above, country code should not be reset to world when country IE ignore is set. But this is violated and restore of regulatory settings is invoked by cfg80211_disconnect_work via regulatory_hint_disconnect(). To address this, avoid regulatory restore from regulatory_hint_disconnect() when COUNTRY_IE_IGNORE is set. Note: Currently, restore_regulatory_settings() takes care of clearing beacon hints. But in the proposed change, regulatory restore is avoided. Therefore, explicitly clear beacon hints when DISABLE_BEACON_HINTS is not set. Signed-off-by: Rajeev Kumar Sirasanagandla Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- net/wireless/reg.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 44befe9f9ff08..dde741f298de7 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -2616,8 +2616,54 @@ static void restore_regulatory_settings(bool reset_user) schedule_work(®_work); } +static bool is_wiphy_all_set_reg_flag(enum ieee80211_regulatory_flags flag) +{ + struct cfg80211_registered_device *rdev; + struct wireless_dev *wdev; + + list_for_each_entry(rdev, &cfg80211_rdev_list, list) { + list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { + wdev_lock(wdev); + if (!(wdev->wiphy->regulatory_flags & flag)) { + wdev_unlock(wdev); + return false; + } + wdev_unlock(wdev); + } + } + + return true; +} + void regulatory_hint_disconnect(void) { + /* Restore of regulatory settings is not required when wiphy(s) + * ignore IE from connected access point but clearance of beacon hints + * is required when wiphy(s) supports beacon hints. + */ + if (is_wiphy_all_set_reg_flag(REGULATORY_COUNTRY_IE_IGNORE)) { + struct reg_beacon *reg_beacon, *btmp; + + if (is_wiphy_all_set_reg_flag(REGULATORY_DISABLE_BEACON_HINTS)) + return; + + spin_lock_bh(®_pending_beacons_lock); + list_for_each_entry_safe(reg_beacon, btmp, + ®_pending_beacons, list) { + list_del(®_beacon->list); + kfree(reg_beacon); + } + spin_unlock_bh(®_pending_beacons_lock); + + list_for_each_entry_safe(reg_beacon, btmp, + ®_beacon_list, list) { + list_del(®_beacon->list); + kfree(reg_beacon); + } + + return; + } + pr_debug("All devices are disconnected, going to restore regulatory settings\n"); restore_regulatory_settings(false); } -- 2.20.1