Subject: [PATCH v3] ethtool: Replace 0-length array with flexible array

From: Kees Cook <[email-masked]>
Date: Thu, 5 Jan 2023 20:28:48 -0800

Zero-length arrays are deprecated[1]. Replace struct ethtool_rxnfc's
"rule_locs" 0-length array with a flexible array. Detected with GCC 13,
using -fstrict-flex-arrays=3:

net/ethtool/common.c: In function 'ethtool_get_max_rxnfc_channel':
net/ethtool/common.c:558:55: warning: array subscript i is outside array bounds of '__u32[0]' {aka 'unsigned int[]'} [-Warray-bounds=]
  558 |                         .fs.location = info->rule_locs[i],
      |                                        ~~~~~~~~~~~~~~~^~~
In file included from include/linux/ethtool.h:19,
                 from include/uapi/linux/ethtool_netlink.h:12,
                 from include/linux/ethtool_netlink.h:6,
                 from net/ethtool/common.c:3:
include/uapi/linux/ethtool.h:1186:41: note: while referencing
'rule_locs'
 1186 |         __u32                           rule_locs[0];
      |                                         ^~~~~~~~~

[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays

Cc: "David S. Miller" <[email-masked]>
Cc: Jakub Kicinski <[email-masked]>
Cc: Andrew Lunn <[email-masked]>
Cc: kernel test robot <[email-masked]>
Cc: Oleksij Rempel <[email-masked]>
Cc: Sean Anderson <[email-masked]>
Cc: Alexandru Tachici <[email-masked]>
Cc: Amit Cohen <[email-masked]>
Cc: "Gustavo A. R. Silva" <[email-masked]>
Cc: Vincent Mailhol <[email-masked]>
Cc: [email-masked]
Signed-off-by: Kees Cook <[email-masked]>
---
v3: don't use helper (vincent)
v2: https://lore.kernel.org/lkml/[email-masked]
---
 include/uapi/linux/ethtool.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index 58e587ba0450..3135fa0ba9a4 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -1183,7 +1183,7 @@ struct ethtool_rxnfc {
 		__u32			rule_cnt;
 		__u32			rss_context;
 	};
-	__u32				rule_locs[0];
+	__u32				rule_locs[];
 };

-- 
2.34.1