Commit 4a59cdfd authored by Gal Pressman's avatar Gal Pressman Committed by Paolo Abeni

rtnetlink: Move nesting cancellation rollback to proper function

Make rtnl_fill_vf() cancel the vfinfo attribute on error instead of the
inner rtnl_fill_vfinfo(), as it is the function that starts it.
Signed-off-by: default avatarGal Pressman <gal@nvidia.com>
Link: https://lore.kernel.org/r/20230716072440.2372567-1-gal@nvidia.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent d3750076
...@@ -1273,7 +1273,6 @@ static noinline_for_stack int rtnl_fill_stats(struct sk_buff *skb, ...@@ -1273,7 +1273,6 @@ static noinline_for_stack int rtnl_fill_stats(struct sk_buff *skb,
static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb, static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
struct net_device *dev, struct net_device *dev,
int vfs_num, int vfs_num,
struct nlattr *vfinfo,
u32 ext_filter_mask) u32 ext_filter_mask)
{ {
struct ifla_vf_rss_query_en vf_rss_query_en; struct ifla_vf_rss_query_en vf_rss_query_en;
...@@ -1343,7 +1342,7 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb, ...@@ -1343,7 +1342,7 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
vf_trust.setting = ivi.trusted; vf_trust.setting = ivi.trusted;
vf = nla_nest_start_noflag(skb, IFLA_VF_INFO); vf = nla_nest_start_noflag(skb, IFLA_VF_INFO);
if (!vf) if (!vf)
goto nla_put_vfinfo_failure; return -EMSGSIZE;
if (nla_put(skb, IFLA_VF_MAC, sizeof(vf_mac), &vf_mac) || if (nla_put(skb, IFLA_VF_MAC, sizeof(vf_mac), &vf_mac) ||
nla_put(skb, IFLA_VF_BROADCAST, sizeof(vf_broadcast), &vf_broadcast) || nla_put(skb, IFLA_VF_BROADCAST, sizeof(vf_broadcast), &vf_broadcast) ||
nla_put(skb, IFLA_VF_VLAN, sizeof(vf_vlan), &vf_vlan) || nla_put(skb, IFLA_VF_VLAN, sizeof(vf_vlan), &vf_vlan) ||
...@@ -1414,8 +1413,6 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb, ...@@ -1414,8 +1413,6 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
nla_put_vf_failure: nla_put_vf_failure:
nla_nest_cancel(skb, vf); nla_nest_cancel(skb, vf);
nla_put_vfinfo_failure:
nla_nest_cancel(skb, vfinfo);
return -EMSGSIZE; return -EMSGSIZE;
} }
...@@ -1441,9 +1438,11 @@ static noinline_for_stack int rtnl_fill_vf(struct sk_buff *skb, ...@@ -1441,9 +1438,11 @@ static noinline_for_stack int rtnl_fill_vf(struct sk_buff *skb,
return -EMSGSIZE; return -EMSGSIZE;
for (i = 0; i < num_vfs; i++) { for (i = 0; i < num_vfs; i++) {
if (rtnl_fill_vfinfo(skb, dev, i, vfinfo, ext_filter_mask)) if (rtnl_fill_vfinfo(skb, dev, i, ext_filter_mask)) {
nla_nest_cancel(skb, vfinfo);
return -EMSGSIZE; return -EMSGSIZE;
} }
}
nla_nest_end(skb, vfinfo); nla_nest_end(skb, vfinfo);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment