Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45fcef8b authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211_hwsim: calculate if_combination.max_interfaces



If we just set this to 2048, and have multiple limits you
can select from, the total number might run over and cause
a warning in cfg80211. This doesn't make sense, so we just
calculate the total max_interfaces now.

Reported-by: default avatar <syzbot+8f91bd563bbff230d0ee@syzkaller.appspotmail.com>
Fixes: 99e3a44b ("mac80211_hwsim: allow setting iftype support")
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent a58d7525
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -2644,7 +2644,7 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
	enum nl80211_band band;
	const struct ieee80211_ops *ops = &mac80211_hwsim_ops;
	struct net *net;
	int idx;
	int idx, i;
	int n_limits = 0;

	if (WARN_ON(param->channels > 1 && !param->use_chanctx))
@@ -2768,12 +2768,23 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
		goto failed_hw;
	}

	data->if_combination.max_interfaces = 0;
	for (i = 0; i < n_limits; i++)
		data->if_combination.max_interfaces +=
			data->if_limits[i].max;

	data->if_combination.n_limits = n_limits;
	data->if_combination.max_interfaces = 2048;
	data->if_combination.limits = data->if_limits;

	/*
	 * If we actually were asked to support combinations,
	 * advertise them - if there's only a single thing like
	 * only IBSS then don't advertise it as combinations.
	 */
	if (data->if_combination.max_interfaces > 1) {
		hw->wiphy->iface_combinations = &data->if_combination;
		hw->wiphy->n_iface_combinations = 1;
	}

	if (param->ciphers) {
		memcpy(data->ciphers, param->ciphers,