[PATCH net-next 02/21] ethtool, stats: add compile-time checks for standard stats

From: Alexander Lobakin
Date: Tue Aug 03 2021 - 12:37:13 EST


Make sure that the number of counters inside stats structures is
with the corresponding Ethtool Netlink definitions.
RMON stats is a special case -- don't take histogram fields into
account.

Signed-off-by: Alexander Lobakin <alexandr.lobakin@xxxxxxxxx>
Reviewed-by: Jesse Brandeburg <jesse.brandeburg@xxxxxxxxx>
---
net/ethtool/stats.c | 9 +++++++++
1 file changed, 9 insertions(+)

diff --git a/net/ethtool/stats.c b/net/ethtool/stats.c
index e35c87206b4c..8b5c27e034f9 100644
--- a/net/ethtool/stats.c
+++ b/net/ethtool/stats.c
@@ -117,6 +117,15 @@ static int stats_prepare_data(const struct ethnl_req_info *req_base,

ops = dev->ethtool_ops;

+ BUILD_BUG_ON(sizeof(data->phy_stats) / sizeof(u64) !=
+ __ETHTOOL_A_STATS_ETH_PHY_CNT);
+ BUILD_BUG_ON(sizeof(data->mac_stats) / sizeof(u64) !=
+ __ETHTOOL_A_STATS_ETH_MAC_CNT);
+ BUILD_BUG_ON(sizeof(data->ctrl_stats) / sizeof(u64) !=
+ __ETHTOOL_A_STATS_ETH_CTRL_CNT);
+ BUILD_BUG_ON(offsetof(typeof(data->rmon_stats), hist) / sizeof(u64) !=
+ __ETHTOOL_A_STATS_RMON_CNT);
+
/* Mark all stats as unset (see ETHTOOL_STAT_NOT_SET) to prevent them
* from being reported to user space in case driver did not set them.
*/
--
2.31.1