gve: Use ethtool_sprintf/puts() to fill stats strings
Make use of standard helpers to simplify filling in stats strings.
The first two ethtool_puts() changes address the following fortification
warnings flagged by W=1 builds with clang-18. (The last ethtool_puts
change does not because the warning relates to writing beyond the first
element of an array, and gve_gstrings_priv_flags only has one element.)
.../fortify-string.h:562:4: warning: call to '__read_overflow2_field' declared with 'warning' attribute: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Wattribute-warning]
562 | __read_overflow2_field(q_size_field, size);
| ^
.../fortify-string.h:562:4: warning: call to '__read_overflow2_field' declared with 'warning' attribute: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Wattribute-warning]
Likewise, the same changes resolve the same problems flagged by Smatch.
.../gve_ethtool.c:100 gve_get_strings() error: __builtin_memcpy() '*gve_gstrings_main_stats' too small (32 vs 576)
.../gve_ethtool.c:120 gve_get_strings() error: __builtin_memcpy() '*gve_gstrings_adminq_stats' too small (32 vs 512)
Compile tested only.
Reviewed-by: Shailend Chand <shailend@google.com>
Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
Signed-off-by: Simon Horman <horms@kernel.org>
Acked-by: Justin Stitt <justinstitt@google.com>
Link: https://lore.kernel.org/r/20240508-gve-comma-v2-2-1ac919225f13@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
ebb8308eac
commit
ba8bcb012b
@@ -90,42 +90,34 @@ static const char gve_gstrings_priv_flags[][ETH_GSTRING_LEN] = {
|
||||
static void gve_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
|
||||
{
|
||||
struct gve_priv *priv = netdev_priv(netdev);
|
||||
char *s = (char *)data;
|
||||
u8 *s = (char *)data;
|
||||
int num_tx_queues;
|
||||
int i, j;
|
||||
|
||||
num_tx_queues = gve_num_tx_queues(priv);
|
||||
switch (stringset) {
|
||||
case ETH_SS_STATS:
|
||||
memcpy(s, *gve_gstrings_main_stats,
|
||||
sizeof(gve_gstrings_main_stats));
|
||||
s += sizeof(gve_gstrings_main_stats);
|
||||
for (i = 0; i < ARRAY_SIZE(gve_gstrings_main_stats); i++)
|
||||
ethtool_puts(&s, gve_gstrings_main_stats[i]);
|
||||
|
||||
for (i = 0; i < priv->rx_cfg.num_queues; i++) {
|
||||
for (j = 0; j < NUM_GVE_RX_CNTS; j++) {
|
||||
snprintf(s, ETH_GSTRING_LEN,
|
||||
gve_gstrings_rx_stats[j], i);
|
||||
s += ETH_GSTRING_LEN;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < priv->rx_cfg.num_queues; i++)
|
||||
for (j = 0; j < NUM_GVE_RX_CNTS; j++)
|
||||
ethtool_sprintf(&s, gve_gstrings_rx_stats[j],
|
||||
i);
|
||||
|
||||
for (i = 0; i < num_tx_queues; i++) {
|
||||
for (j = 0; j < NUM_GVE_TX_CNTS; j++) {
|
||||
snprintf(s, ETH_GSTRING_LEN,
|
||||
gve_gstrings_tx_stats[j], i);
|
||||
s += ETH_GSTRING_LEN;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < num_tx_queues; i++)
|
||||
for (j = 0; j < NUM_GVE_TX_CNTS; j++)
|
||||
ethtool_sprintf(&s, gve_gstrings_tx_stats[j],
|
||||
i);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(gve_gstrings_adminq_stats); i++)
|
||||
ethtool_puts(&s, gve_gstrings_adminq_stats[i]);
|
||||
|
||||
memcpy(s, *gve_gstrings_adminq_stats,
|
||||
sizeof(gve_gstrings_adminq_stats));
|
||||
s += sizeof(gve_gstrings_adminq_stats);
|
||||
break;
|
||||
|
||||
case ETH_SS_PRIV_FLAGS:
|
||||
memcpy(s, *gve_gstrings_priv_flags,
|
||||
sizeof(gve_gstrings_priv_flags));
|
||||
s += sizeof(gve_gstrings_priv_flags);
|
||||
for (i = 0; i < ARRAY_SIZE(gve_gstrings_priv_flags); i++)
|
||||
ethtool_puts(&s, gve_gstrings_priv_flags[i]);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user