wifi: mac80211: fix unsolicited broadcast probe config
There's a bug in ieee80211_set_unsol_bcast_probe_resp(), it tries
to return BSS_CHANGED_UNSOL_BCAST_PROBE_RESP (which has the value
1<<31) in an int, which makes it negative and considered an error.
Fix this by passing the changed flags to set separately.
Fixes: 3b1c256eb4
("wifi: mac80211: fixes in FILS discovery updates")
Reviewed-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Link: https://msgid.link/20240129195729.965b0740bf80.I6bc6f5236863f686c17d689be541b1dd2633c417@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
86b2dac224
commit
178e9d6adc
1 changed files with 7 additions and 7 deletions
|
@ -5,7 +5,7 @@
|
||||||
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||||
* Copyright 2013-2015 Intel Mobile Communications GmbH
|
* Copyright 2013-2015 Intel Mobile Communications GmbH
|
||||||
* Copyright (C) 2015-2017 Intel Deutschland GmbH
|
* Copyright (C) 2015-2017 Intel Deutschland GmbH
|
||||||
* Copyright (C) 2018-2022 Intel Corporation
|
* Copyright (C) 2018-2024 Intel Corporation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/ieee80211.h>
|
#include <linux/ieee80211.h>
|
||||||
|
@ -987,7 +987,8 @@ static int
|
||||||
ieee80211_set_unsol_bcast_probe_resp(struct ieee80211_sub_if_data *sdata,
|
ieee80211_set_unsol_bcast_probe_resp(struct ieee80211_sub_if_data *sdata,
|
||||||
struct cfg80211_unsol_bcast_probe_resp *params,
|
struct cfg80211_unsol_bcast_probe_resp *params,
|
||||||
struct ieee80211_link_data *link,
|
struct ieee80211_link_data *link,
|
||||||
struct ieee80211_bss_conf *link_conf)
|
struct ieee80211_bss_conf *link_conf,
|
||||||
|
u64 *changed)
|
||||||
{
|
{
|
||||||
struct unsol_bcast_probe_resp_data *new, *old = NULL;
|
struct unsol_bcast_probe_resp_data *new, *old = NULL;
|
||||||
|
|
||||||
|
@ -1011,7 +1012,8 @@ ieee80211_set_unsol_bcast_probe_resp(struct ieee80211_sub_if_data *sdata,
|
||||||
RCU_INIT_POINTER(link->u.ap.unsol_bcast_probe_resp, NULL);
|
RCU_INIT_POINTER(link->u.ap.unsol_bcast_probe_resp, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
|
*changed |= BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ieee80211_set_ftm_responder_params(
|
static int ieee80211_set_ftm_responder_params(
|
||||||
|
@ -1450,10 +1452,9 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
|
||||||
|
|
||||||
err = ieee80211_set_unsol_bcast_probe_resp(sdata,
|
err = ieee80211_set_unsol_bcast_probe_resp(sdata,
|
||||||
¶ms->unsol_bcast_probe_resp,
|
¶ms->unsol_bcast_probe_resp,
|
||||||
link, link_conf);
|
link, link_conf, &changed);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto error;
|
goto error;
|
||||||
changed |= err;
|
|
||||||
|
|
||||||
err = drv_start_ap(sdata->local, sdata, link_conf);
|
err = drv_start_ap(sdata->local, sdata, link_conf);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -1525,10 +1526,9 @@ static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev,
|
||||||
|
|
||||||
err = ieee80211_set_unsol_bcast_probe_resp(sdata,
|
err = ieee80211_set_unsol_bcast_probe_resp(sdata,
|
||||||
¶ms->unsol_bcast_probe_resp,
|
¶ms->unsol_bcast_probe_resp,
|
||||||
link, link_conf);
|
link, link_conf, &changed);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
changed |= err;
|
|
||||||
|
|
||||||
if (beacon->he_bss_color_valid &&
|
if (beacon->he_bss_color_valid &&
|
||||||
beacon->he_bss_color.enabled != link_conf->he_bss_color.enabled) {
|
beacon->he_bss_color.enabled != link_conf->he_bss_color.enabled) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue