rtnetlink: NUL-terminate IFLA_PHYS_PORT_NAME string
Subsystems (2)
PATCH 1/1 rtnetlink: NUL-terminate IFLA_PHYS_PORT_NAME string
IFLA_PHYS_PORT_NAME is a string attribute, so terminate it with \0. Otherwise libnl3 fails to validate netlink messages with this attribute. "ip -detail a" assumes too that the attribute is NUL-terminated when printing it. It often was, due to padding.
I noticed this as libvirtd failing to start on a system with sfc driver after upgrading it to Linux 4.11, i.e. when sfc added support for phys_port_name.
--- net/core/rtnetlink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/core/rtnetlink.c +1 -1
@@ -1056,7 +1056,7 @@ static int rtnl_phys_port_name_fill(struct sk_buff *skb, struct net_device *dev)return err; } -if (nla_put (skb,IFLA_PHYS_PORT_NAME ,strlen (name), name)) +if (nla_put_string (skb,IFLA_PHYS_PORT_NAME , name))return -EMSGSIZE ;return 0 ;
Signature · 1 line
2.12.2
David Miller
maintainerFrom: Michal Schmidt <[email protected]>
Date: Thu, 4 May 2017 16:48:58 +0200
Quoted 10 lines
IFLA_PHYS_PORT_NAMEis a string attribute, so terminate it with \0. Otherwise libnl3 fails to validate netlink messages with this attribute. "ip -detail a" assumes too that the attribute is NUL-terminated when printing it. It often was, due to padding.I noticed this as libvirtd failing to start on a system with sfc driver after upgrading it to Linux 4.11, i.e. when sfc added support for
phys_port_name.Signed-off-by Michal Schmidt <[email protected]>
Good catch, applied and queued up for -stable, thanks.
Quoted 20 lines · Michal Schmidt
IFLA_PHYS_PORT_NAMEis a string attribute, so terminate it with \0. Otherwise libnl3 fails to validate netlink messages with this attribute. "ip -detail a" assumes too that the attribute is NUL-terminated when printing it. It often was, due to padding.I noticed this as libvirtd failing to start on a system with sfc driver after upgrading it to Linux 4.11, i.e. when sfc added support for
phys_port_name.Signed-off-by Michal Schmidt <[email protected]>--- net/core/rtnetlink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)net/core/rtnetlink.c +0
-0
net/core/rtnetlink.c static int rtnl_phys_port_name_fill(struct sk_buff *skb, struct net_device *dev) · line 1062
Quoted 8 lines
net/core/rtnetlink.c +1
-1@@ -1056,7 +1056,7 @@ static int rtnl_phys_port_name_fill(struct sk_buff *skb, struct net_device *dev)return err; } -if (nla_put (skb,IFLA_PHYS_PORT_NAME ,strlen (name), name)) +if (nla_put_string (skb,IFLA_PHYS_PORT_NAME , name))return -EMSGSIZE ;return 0 ;
Thanks for fixing.