Bringing a monitor up raises the receive filter counts for every monitor. Taking one down lowers them only inside the branch that retires the virtual monitor. So an active monitor leaves an increment behind on every cycle, and the hardware keeps delivering frames nobody asked for. Dropping cooked monitor support indented the decrement into that branch. It sat outside before. Counts after each up, down and delete cycle on a 7921 USB part: without cycle one ends at 1, cycle two starts at 2 with every cycle starts and ends at 1, in any order Move the decrement back out so it mirrors the increment. Fixes: 286e69677065 ("wifi: mac80211: Drop cooked monitor support") Cc: stable@vger.kernel.org Signed-off-by: Devin Wittmayer --- The counts are fcsfail, plcpfail, control, pspoll, other_bss and the one that keeps TX status reporting armed. Changing flags on a running monitor still balances, so only the open and stop pair drift. v2: changelog rewritten by hand, and the counts above are measured on hardware. v1: https://lore.kernel.org/linux-wireless/20260825043754.66918-1-lucid_duck@justthetip.ca/ net/mac80211/iface.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 43460a705a6b..9b400caf2765 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -630,8 +630,9 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, bool going_do hw_reconf_flags |= IEEE80211_CONF_CHANGE_MONITOR; } - ieee80211_adjust_monitor_flags(sdata, -1); } + + ieee80211_adjust_monitor_flags(sdata, -1); break; case NL80211_IFTYPE_NAN: /* Check if any open NAN_DATA interfaces */ -- 2.55.0