From: Lee Jones <lee@kernel.org>
To: lee@kernel.org, Johannes Berg <johannes@sipsolutions.net>,
Jouni Malinen <j@w1.fi>, Jiri Benc <jbenc@suse.cz>,
Michael Wu <flamingice@sourmilk.net>,
Rajkumar Manoharan <rmanohar@qca.qualcomm.com>,
"John W. Linville" <linville@tuxdriver.com>,
linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org
Subject: [PATCH v2 2/2] wifi: mac80211: send wake nullfunc when TIM bit is set while awake
Date: Tue, 3 Nov 2026 11:06:33 +0000 [thread overview]
Message-ID: <20261103110642.260244-3-lee@kernel.org> (raw)
In-Reply-To: <20261103110642.260244-1-lee@kernel.org>
When an AP's Beacon TIM element indicates buffered unicast traffic for a
station's AID, the AP believes the station is in power-save mode. If
the station is actually awake (IEEE80211_CONF_PS is not set) and
dynamic power-save is disabled (dynamic_ps_timeout == 0, for instance
when power-save is disabled on the interface), ieee80211_rx_mgmt_beacon()
currently takes neither the dynamic-PS wakeup branch nor the PS-Poll
branch.
As a result, if the AP's power-save state for the station becomes
desynchronised (for example, due to an unauthenticated frame with the PM
bit set), an awake client with power-save disabled ignores its AID bit
in the TIM and never transmits a nullfunc frame with PM=0 to flush the
AP's buffered frames.
Send a wake nullfunc frame in ieee80211_rx_mgmt_beacon() whenever the
TIM indicates buffered traffic for the station while IEEE80211_CONF_PS
is not set.
Fixes: 6f0756a38fc4 ("mac80211: do not send pspoll when powersave is disabled")
Cc: stable@vger.kernel.org
Signed-off-by: Lee Jones <lee@kernel.org>
---
v1 => v2: New patch per Johannes Berg's review suggestion
net/mac80211/mlme.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 6ec45a9f7221..802c714ba852 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -8286,7 +8286,8 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_link_data *link,
if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK) &&
ieee80211_check_tim(elems->tim, elems->tim_len, vif_cfg->aid,
vif_cfg->s1g)) {
- if (local->hw.conf.dynamic_ps_timeout > 0) {
+ if (local->hw.conf.dynamic_ps_timeout > 0 ||
+ !(local->hw.conf.flags & IEEE80211_CONF_PS)) {
if (local->hw.conf.flags & IEEE80211_CONF_PS) {
local->hw.conf.flags &= ~IEEE80211_CONF_PS;
ieee80211_hw_config(local, -1,
--
2.56.0.313.g2479322e68-goog
next prev parent reply other threads:[~2026-11-03 11:06 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 11:06 [PATCH v2 0/2] wifi: mac80211: Power-save state and TIM handling fixes Lee Jones
2026-11-03 11:06 ` [PATCH v2 1/2] wifi: mac80211: ignore PM bit in non-bufferable MMPDUs Lee Jones
2026-11-03 11:06 ` Lee Jones [this message]
2026-11-03 12:11 ` [PATCH v2 2/2] wifi: mac80211: send wake nullfunc when TIM bit is set while awake Johannes Berg
2026-11-04 11:06 ` Lee Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261103110642.260244-3-lee@kernel.org \
--to=lee@kernel.org \
--cc=flamingice@sourmilk.net \
--cc=j@w1.fi \
--cc=jbenc@suse.cz \
--cc=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=rmanohar@qca.qualcomm.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.