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

Reply via email to