[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 10 Oct 2017 08:50:45 -0600
From: David Ahern <dsahern@...il.com>
To: Nicolas Dichtel <nicolas.dichtel@...nd.com>, davem@...emloft.net
Cc: netdev@...r.kernel.org, oliver@...tkopp.net,
Stephen Hemminger <stephen@...workplumber.org>
Subject: Re: [PATCH net v2] net: enable interface alias removal via rtnl
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 <oliver@...tkopp.net>
> CC: Stephen Hemminger <stephen@...workplumber.org>
> Fixes: 96ca4a2cc145 ("net: remove ifalias on empty given alias")
> Reported-by: Julien FLoret <julien.floret@...nd.com>
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@...nd.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 <dsahern@...il.com>
Powered by blists - more mailing lists