diff options
Diffstat (limited to 'net/mac80211/cfg.c')
| -rw-r--r-- | net/mac80211/cfg.c | 21 | 
1 files changed, 13 insertions, 8 deletions
| diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 808f5fcd1ce..fb306814576 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -3290,14 +3290,19 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,  	int ret = -ENODATA;  	rcu_read_lock(); -	if (local->use_chanctx) { -		chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); -		if (chanctx_conf) { -			*chandef = chanctx_conf->def; -			ret = 0; -		} -	} else if (local->open_count == local->monitors) { -		*chandef = local->monitor_chandef; +	chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); +	if (chanctx_conf) { +		*chandef = chanctx_conf->def; +		ret = 0; +	} else if (local->open_count > 0 && +		   local->open_count == local->monitors && +		   sdata->vif.type == NL80211_IFTYPE_MONITOR) { +		if (local->use_chanctx) +			*chandef = local->monitor_chandef; +		else +			cfg80211_chandef_create(chandef, +						local->_oper_channel, +						local->_oper_channel_type);  		ret = 0;  	}  	rcu_read_unlock(); |