On Wed, 2018-01-10 at 17:42 +0100, Benjamin Beichler wrote:
>
>
> + if (info->attrs[HWSIM_ATTR_PERM_ADDR]) {
> + if (nla_len(info->attrs[HWSIM_ATTR_PERM_ADDR]) != ETH_ALEN) {
> + pr_debug("mac80211_hwsim: MAC has wrong size\n");
> + return -EINVAL;
> + }
Oh, also - don't do this.
1) don't print, use NL_SET_ERR_MSG().
2) use the policy to validate lengths
> + if (!is_local_ether_addr(
> + nla_data(info->attrs[HWSIM_ATTR_PERM_ADDR]))) {
> + pr_debug("mac80211_hwsim: MAC is not locally
> administered\n");
> + return -EINVAL;
> + }
This doesn't really matter - it's purely virtual. I think we can avoid
that.
> + if (get_hwsim_data_ref_from_addr(
> + nla_data(info->attrs[HWSIM_ATTR_PERM_ADDR]))) {
> + pr_debug("mac80211_hwsim: perm MAC already in use\n");
> + return -EINVAL;
> + }
This is racy afaict - remove it and return a clash later when you fail
to insert the new radio.
johannes