mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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…
	
		Reference in a new issue