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: syzbot+8f91bd563bbff230d0ee@syzkaller.appspotmail.com
Fixes: 99e3a44bac ("mac80211_hwsim: allow setting iftype support")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Johannes Berg 2019-03-29 08:56:22 +01:00
parent a58d7525b8
commit 45fcef8b72
1 changed files with 15 additions and 4 deletions

View File

@ -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;
hw->wiphy->iface_combinations = &data->if_combination;
hw->wiphy->n_iface_combinations = 1;
/*
* 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,