On 4/8/2024 11:41 AM, Johannes Berg wrote: > On Tue, 2024-03-26 at 20:24 -0700, Xin Deng wrote: >> wdev->valid_links is not cleared when upper layer disconnect from a >> wdev->AP MLD. It has been observed that this would prevent offchannel >> operations like remain-on-channel which would be needed for user space >> operations with Public Action frame. > > I agree that's a problem, we shouldn't leave the valid_links set. > >> Signed-off-by: Xin Deng <quic_deng@xxxxxxxxxxx> >> --- >> net/wireless/sme.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/net/wireless/sme.c b/net/wireless/sme.c >> index 82e3ce42206c..86e837f37f8c 100644 >> --- a/net/wireless/sme.c >> +++ b/net/wireless/sme.c >> @@ -492,6 +492,7 @@ void cfg80211_wdev_release_link_bsses(struct wireless_dev *wdev, u16 link_mask) >> &wdev->links[link].client.current_bss->pub); >> wdev->links[link].client.current_bss = NULL; >> } >> + wdev->valid_links = 0; >> > > But this is (very obviously, even with only the limited context shown!) > in the completely wrong place. Concur, so NAK my Reviewed-by: That function is potentially only removing a subset of links, so it should not be setting the valid_links to 0 since not all of the links may have been removed. /jeff