summaryrefslogtreecommitdiffstats
path: root/drivers/net/team
diff options
context:
space:
mode:
authorMichal Kubecek <mkubecek@suse.cz>2019-04-26 05:13:06 -0400
committerDavid S. Miller <davem@davemloft.net>2019-04-27 17:03:44 -0400
commitae0be8de9a53cda3505865c11826d8ff0640237c (patch)
tree43bc8a0d58965d57e4ed1bedf8d892c3fe72e8b5 /drivers/net/team
parentc7881b4a97e21b617b8243094dfa4b62028b956c (diff)
netlink: make nla_nest_start() add NLA_F_NESTED flag
Even if the NLA_F_NESTED flag was introduced more than 11 years ago, most netlink based interfaces (including recently added ones) are still not setting it in kernel generated messages. Without the flag, message parsers not aware of attribute semantics (e.g. wireshark dissector or libmnl's mnl_nlmsg_fprintf()) cannot recognize nested attributes and won't display the structure of their contents. Unfortunately we cannot just add the flag everywhere as there may be userspace applications which check nlattr::nla_type directly rather than through a helper masking out the flags. Therefore the patch renames nla_nest_start() to nla_nest_start_noflag() and introduces nla_nest_start() as a wrapper adding NLA_F_NESTED. The calls which add NLA_F_NESTED manually are rewritten to use nla_nest_start(). Except for changes in include/net/netlink.h, the patch was generated using this semantic patch: @@ expression E1, E2; @@ -nla_nest_start(E1, E2) +nla_nest_start_noflag(E1, E2) @@ expression E1, E2; @@ -nla_nest_start_noflag(E1, E2 | NLA_F_NESTED) +nla_nest_start(E1, E2) Signed-off-by: Michal Kubecek <mkubecek@suse.cz> Acked-by: Jiri Pirko <jiri@mellanox.com> Acked-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/team')
-rw-r--r--drivers/net/team/team.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index eb4711bfc52a..6306897c147f 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -2290,7 +2290,7 @@ static int team_nl_fill_one_option_get(struct sk_buff *skb, struct team *team,
2290 if (err) 2290 if (err)
2291 return err; 2291 return err;
2292 2292
2293 option_item = nla_nest_start(skb, TEAM_ATTR_ITEM_OPTION); 2293 option_item = nla_nest_start_noflag(skb, TEAM_ATTR_ITEM_OPTION);
2294 if (!option_item) 2294 if (!option_item)
2295 return -EMSGSIZE; 2295 return -EMSGSIZE;
2296 2296
@@ -2404,7 +2404,7 @@ start_again:
2404 2404
2405 if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex)) 2405 if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex))
2406 goto nla_put_failure; 2406 goto nla_put_failure;
2407 option_list = nla_nest_start(skb, TEAM_ATTR_LIST_OPTION); 2407 option_list = nla_nest_start_noflag(skb, TEAM_ATTR_LIST_OPTION);
2408 if (!option_list) 2408 if (!option_list)
2409 goto nla_put_failure; 2409 goto nla_put_failure;
2410 2410
@@ -2626,7 +2626,7 @@ static int team_nl_fill_one_port_get(struct sk_buff *skb,
2626{ 2626{
2627 struct nlattr *port_item; 2627 struct nlattr *port_item;
2628 2628
2629 port_item = nla_nest_start(skb, TEAM_ATTR_ITEM_PORT); 2629 port_item = nla_nest_start_noflag(skb, TEAM_ATTR_ITEM_PORT);
2630 if (!port_item) 2630 if (!port_item)
2631 goto nest_cancel; 2631 goto nest_cancel;
2632 if (nla_put_u32(skb, TEAM_ATTR_PORT_IFINDEX, port->dev->ifindex)) 2632 if (nla_put_u32(skb, TEAM_ATTR_PORT_IFINDEX, port->dev->ifindex))
@@ -2681,7 +2681,7 @@ start_again:
2681 2681
2682 if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex)) 2682 if (nla_put_u32(skb, TEAM_ATTR_TEAM_IFINDEX, team->dev->ifindex))
2683 goto nla_put_failure; 2683 goto nla_put_failure;
2684 port_list = nla_nest_start(skb, TEAM_ATTR_LIST_PORT); 2684 port_list = nla_nest_start_noflag(skb, TEAM_ATTR_LIST_PORT);
2685 if (!port_list) 2685 if (!port_list)
2686 goto nla_put_failure; 2686 goto nla_put_failure;
2687 2687