On 10/10/17 6:41 AM, Nicolas Dichtel wrote:
> IFLA_IFALIAS is defined as NLA_STRING. It means that the minimal length of
> the attribute is 1 ("\0"). However, to remove an alias, the attribute
> length must be 0 (see dev_set_alias()).
> 
> Let's define the type to NLA_BINARY, so that the alias can be removed.

not to be pedantic, but we need to be clear that the type is changed
only for policy validation.

> 
> Example:
> $ ip l s dummy0 alias foo
> $ ip l l dev dummy0
> 5: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT 
> group default qlen 1000
>     link/ether ae:20:30:4f:a7:f3 brd ff:ff:ff:ff:ff:ff
>     alias foo
> 
> Before the patch:
> $ ip l s dummy0 alias ""
> RTNETLINK answers: Numerical result out of range
> 
> After the patch:
> $ ip l s dummy0 alias ""
> $ ip l l dev dummy0
> 5: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT 
> group default qlen 1000
>     link/ether ae:20:30:4f:a7:f3 brd ff:ff:ff:ff:ff:ff
> 
> CC: Oliver Hartkopp <oli...@hartkopp.net>
> CC: Stephen Hemminger <step...@networkplumber.org>
> Fixes: 96ca4a2cc145 ("net: remove ifalias on empty given alias")
> Reported-by: Julien FLoret <julien.flo...@6wind.com>
> Signed-off-by: Nicolas Dichtel <nicolas.dich...@6wind.com>
> ---
> 
> v1 -> v2: add the comment
> 
>  net/core/rtnetlink.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
> index d4bcdcc68e92..5343565d88b7 100644
> --- a/net/core/rtnetlink.c
> +++ b/net/core/rtnetlink.c
> @@ -1483,7 +1483,10 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] 
> = {
>       [IFLA_LINKINFO]         = { .type = NLA_NESTED },
>       [IFLA_NET_NS_PID]       = { .type = NLA_U32 },
>       [IFLA_NET_NS_FD]        = { .type = NLA_U32 },
> -     [IFLA_IFALIAS]          = { .type = NLA_STRING, .len = IFALIASZ-1 },
> +     /* IFLA_IFALIAS is a string, but policy is set to NLA_BINARY to
> +      * allow 0-length string (needed to remove an alias).
> +      */
> +     [IFLA_IFALIAS]          = { .type = NLA_BINARY, .len = IFALIASZ - 1 },
>       [IFLA_VFINFO_LIST]      = {. type = NLA_NESTED },
>       [IFLA_VF_PORTS]         = { .type = NLA_NESTED },
>       [IFLA_PORT_SELF]        = { .type = NLA_NESTED },
> 

Seems like a reasonable solution.

Acked-by: David Ahern <dsah...@gmail.com>

Reply via email to