Skip to content

Commit 8c0500c

Browse files
committed
wifi: mac80211: fix reporting of all valid links in sta_set_sinfo()
JIRA: https://issues.redhat.com/browse/RHEL-114889 commit eebccbf Author: Sarika Sharma <quic_sarishar@quicinc.com> Date: Thu Sep 4 16:10:54 2025 +0530 wifi: mac80211: fix reporting of all valid links in sta_set_sinfo() Currently, sta_set_sinfo() fails to populate link-level station info when sinfo->valid_links is initially 0 and sta->sta.valid_links has bits set for links other than link 0. This typically occurs when association happens on a non-zero link or link 0 deleted dynamically. In such cases, the for_each_valid_link(sinfo, link_id) loop only executes for link 0 and terminates early, since sinfo->valid_links remains 0. As a result, only MLD-level information is reported to userspace. Hence to fix, initialize sinfo->valid_links with sta->sta.valid_links before entering the loop to ensure loop executes for each valid link. During iteration, mask out invalid links from sinfo->valid_links if any of sta->link[link_id], sdata->link[link_id], or sinfo->links[link_id] are not present, to report only valid link information. Fixes: 505991f ("wifi: mac80211: extend support to fill link level sinfo structure") Signed-off-by: Sarika Sharma <quic_sarishar@quicinc.com> Link: https://patch.msgid.link/20250904104054.790321-1-quic_sarishar@quicinc.com [clarify comment] Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
1 parent fd56bac commit 8c0500c

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

net/mac80211/sta_info.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3206,16 +3206,20 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
32063206
struct link_sta_info *link_sta;
32073207

32083208
ether_addr_copy(sinfo->mld_addr, sta->addr);
3209+
3210+
/* assign valid links first for iteration */
3211+
sinfo->valid_links = sta->sta.valid_links;
3212+
32093213
for_each_valid_link(sinfo, link_id) {
32103214
link_sta = wiphy_dereference(sta->local->hw.wiphy,
32113215
sta->link[link_id]);
32123216
link = wiphy_dereference(sdata->local->hw.wiphy,
32133217
sdata->link[link_id]);
32143218

3215-
if (!link_sta || !sinfo->links[link_id] || !link)
3219+
if (!link_sta || !sinfo->links[link_id] || !link) {
3220+
sinfo->valid_links &= ~BIT(link_id);
32163221
continue;
3217-
3218-
sinfo->valid_links = sta->sta.valid_links;
3222+
}
32193223
sta_set_link_sinfo(sta, sinfo->links[link_id],
32203224
link, tidstats);
32213225
}

0 commit comments

Comments
 (0)