From: Sabrina Dubroca Date: Tue, 15 Nov 2016 09:39:03 +0000 (+0100) Subject: rtnetlink: fix rtnl_vfinfo_size X-Git-Tag: v3.16.40~74 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6a9c63564c4f3ce1a01b72b5e2316208c01c48c4;p=thirdparty%2Fkernel%2Fstable.git rtnetlink: fix rtnl_vfinfo_size commit 7e75f74a171a8146cc3ee92d5562878b40c25fb5 upstream. The size reported by rtnl_vfinfo_size doesn't match the space used by rtnl_fill_vfinfo. rtnl_vfinfo_size currently doesn't account for the nest attributes used by statistics (added in commit 3b766cd83232), nor for struct ifla_vf_tx_rate (since commit ed616689a3d9, which added ifla_vf_rate to the dump without removing ifla_vf_tx_rate, but replaced ifla_vf_tx_rate with ifla_vf_rate in the size computation). Fixes: 3b766cd83232 ("net/core: Add reading VF statistics through the PF netdevice") Fixes: ed616689a3d9 ("net-next:v4: Add support to configure SR-IOV VF minimum and maximum Tx rate through ip tool") Signed-off-by: Sabrina Dubroca Signed-off-by: David S. Miller [bwh: Backported to 3.16: only need to add space for IFLA_VF_TX_RATE] Signed-off-by: Ben Hutchings --- diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 7544529999751..96e9c5f517042 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -794,12 +794,13 @@ static inline int rtnl_vfinfo_size(const struct net_device *dev, if (dev->dev.parent && dev_is_pci(dev->dev.parent) && (ext_filter_mask & RTEXT_FILTER_VF)) { int num_vfs = dev_num_vf(dev->dev.parent); - size_t size = nla_total_size(sizeof(struct nlattr)); - size += nla_total_size(num_vfs * sizeof(struct nlattr)); + size_t size = nla_total_size(0); size += num_vfs * - (nla_total_size(sizeof(struct ifla_vf_mac)) + + (nla_total_size(0) + + nla_total_size(sizeof(struct ifla_vf_mac)) + nla_total_size(sizeof(struct ifla_vf_vlan)) + nla_total_size(sizeof(struct ifla_vf_spoofchk)) + + nla_total_size(sizeof(struct ifla_vf_tx_rate)) + nla_total_size(sizeof(struct ifla_vf_rate)) + nla_total_size(sizeof(struct ifla_vf_link_state))); return size;