Takashi Iwai 026de4
From 041c881a0ba8a75f71118bd9766b78f04beed469 Mon Sep 17 00:00:00 2001
Takashi Iwai 026de4
From: Karthikeyan Kathirvel <kathirve@codeaurora.org>
Takashi Iwai 026de4
Date: Thu, 11 Mar 2021 10:59:07 +0530
Takashi Iwai 026de4
Subject: [PATCH] mac80211: choose first enabled channel for monitor
Takashi Iwai 026de4
Git-commit: 041c881a0ba8a75f71118bd9766b78f04beed469
Takashi Iwai 026de4
Patch-mainline: v5.12-rc5
Takashi Iwai 026de4
References: git-fixes
Takashi Iwai 026de4
Takashi Iwai 026de4
Even if the first channel from sband channel list is invalid
Takashi Iwai 026de4
or disabled mac80211 ends up choosing it as the default channel
Takashi Iwai 026de4
for monitor interfaces, making them not usable.
Takashi Iwai 026de4
Takashi Iwai 026de4
Fix this by assigning the first available valid or enabled
Takashi Iwai 026de4
channel instead.
Takashi Iwai 026de4
Takashi Iwai 026de4
Signed-off-by: Karthikeyan Kathirvel <kathirve@codeaurora.org>
Takashi Iwai 026de4
Link: https://lore.kernel.org/r/1615440547-7661-1-git-send-email-kathirve@codeaurora.org
Takashi Iwai 026de4
[reword commit message, comment, code cleanups]
Takashi Iwai 026de4
Takashi Iwai 026de4
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Takashi Iwai 026de4
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 026de4
Takashi Iwai 026de4
---
Takashi Iwai 026de4
 net/mac80211/main.c | 13 ++++++++++++-
Takashi Iwai 026de4
 1 file changed, 12 insertions(+), 1 deletion(-)
Takashi Iwai 026de4
Takashi Iwai 026de4
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
Takashi Iwai 026de4
index 4f3f8bb58e76..1b9c82616606 100644
Takashi Iwai 026de4
--- a/net/mac80211/main.c
Takashi Iwai 026de4
+++ b/net/mac80211/main.c
Takashi Iwai 026de4
@@ -973,8 +973,19 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
Takashi Iwai 026de4
 			continue;
Takashi Iwai 026de4
 
Takashi Iwai 026de4
 		if (!dflt_chandef.chan) {
Takashi Iwai 026de4
+			/*
Takashi Iwai 026de4
+			 * Assign the first enabled channel to dflt_chandef
Takashi Iwai 026de4
+			 * from the list of channels
Takashi Iwai 026de4
+			 */
Takashi Iwai 026de4
+			for (i = 0; i < sband->n_channels; i++)
Takashi Iwai 026de4
+				if (!(sband->channels[i].flags &
Takashi Iwai 026de4
+						IEEE80211_CHAN_DISABLED))
Takashi Iwai 026de4
+					break;
Takashi Iwai 026de4
+			/* if none found then use the first anyway */
Takashi Iwai 026de4
+			if (i == sband->n_channels)
Takashi Iwai 026de4
+				i = 0;
Takashi Iwai 026de4
 			cfg80211_chandef_create(&dflt_chandef,
Takashi Iwai 026de4
-						&sband->channels[0],
Takashi Iwai 026de4
+						&sband->channels[i],
Takashi Iwai 026de4
 						NL80211_CHAN_NO_HT);
Takashi Iwai 026de4
 			/* init channel we're on */
Takashi Iwai 026de4
 			if (!local->use_chanctx && !local->_oper_chandef.chan) {
Takashi Iwai 026de4
-- 
Takashi Iwai 026de4
2.26.2
Takashi Iwai 026de4