summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarthikeyan Kathirvel <kathirve@codeaurora.org>2021-03-11 06:29:07 +0100
committerJohannes Berg <johannes.berg@intel.com>2021-03-16 21:20:47 +0100
commit041c881a0ba8a75f71118bd9766b78f04beed469 (patch)
treedeaabc9c937c2c5a6c49ce5ca0c445e63a6bfd22
parentnl80211: fix locking for wireless device netns change (diff)
downloadlinux-041c881a0ba8a75f71118bd9766b78f04beed469.tar.xz
linux-041c881a0ba8a75f71118bd9766b78f04beed469.zip
mac80211: choose first enabled channel for monitor
Even if the first channel from sband channel list is invalid or disabled mac80211 ends up choosing it as the default channel for monitor interfaces, making them not usable. Fix this by assigning the first available valid or enabled channel instead. Signed-off-by: Karthikeyan Kathirvel <kathirve@codeaurora.org> Link: https://lore.kernel.org/r/1615440547-7661-1-git-send-email-kathirve@codeaurora.org [reword commit message, comment, code cleanups] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--net/mac80211/main.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 4f3f8bb58e76..1b9c82616606 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -973,8 +973,19 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
continue;
if (!dflt_chandef.chan) {
+ /*
+ * Assign the first enabled channel to dflt_chandef
+ * from the list of channels
+ */
+ for (i = 0; i < sband->n_channels; i++)
+ if (!(sband->channels[i].flags &
+ IEEE80211_CHAN_DISABLED))
+ break;
+ /* if none found then use the first anyway */
+ if (i == sband->n_channels)
+ i = 0;
cfg80211_chandef_create(&dflt_chandef,
- &sband->channels[0],
+ &sband->channels[i],
NL80211_CHAN_NO_HT);
/* init channel we're on */
if (!local->use_chanctx && !local->_oper_chandef.chan) {