[PATCH 13/18] drivers/net: use secure random for RSS key
Stephen Hemminger
stephen at networkplumber.org
Tue Sep 15 21:21:11 CEST 2026
Both drivers built the default RSS key a word at a time from rte_rand().
That generator is a fast non-cryptographic PRNG whose state is
recoverable from its output, so the resulting key is predictable.
Use rte_random_bytes() which takes randomness from the operating
system, and report the error to the caller.
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
drivers/net/axgbe/axgbe_dev.c | 16 +++++++++++-----
drivers/net/bnx2x/bnx2x.c | 11 +++++++----
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/drivers/net/axgbe/axgbe_dev.c b/drivers/net/axgbe/axgbe_dev.c
index 482d3d8062..37856fddd9 100644
--- a/drivers/net/axgbe/axgbe_dev.c
+++ b/drivers/net/axgbe/axgbe_dev.c
@@ -3,6 +3,8 @@
* Copyright(c) 2018 Synopsys, Inc. All rights reserved.
*/
+#include <rte_random.h>
+
#include "axgbe_ethdev.h"
#include "axgbe_common.h"
#include "axgbe_phy.h"
@@ -931,13 +933,15 @@ static void axgbe_rss_options(struct axgbe_port *pdata)
static int axgbe_config_rss(struct axgbe_port *pdata)
{
uint32_t i;
+ int ret;
if (pdata->rss_enable) {
/* Initialize RSS hash key and lookup table */
- uint32_t *key = (uint32_t *)pdata->rss_key;
-
- for (i = 0; i < sizeof(pdata->rss_key) / 4; i++)
- *key++ = (uint32_t)rte_rand();
+ ret = rte_random_bytes(pdata->rss_key, sizeof(pdata->rss_key));
+ if (ret != 0) {
+ PMD_DRV_LOG_LINE(ERR, "Error generating RSS hash key");
+ return ret;
+ }
for (i = 0; i < AXGBE_RSS_MAX_TABLE_SIZE; i++)
AXGMAC_SET_BITS(pdata->rss_table[i], MAC_RSSDR, DMCH,
i % pdata->eth_dev->data->nb_rx_queues);
@@ -1393,7 +1397,9 @@ static int axgbe_init(struct axgbe_port *pdata)
axgbe_config_tx_pbl_val(pdata);
axgbe_config_rx_pbl_val(pdata);
axgbe_config_rx_buffer_size(pdata);
- axgbe_config_rss(pdata);
+ ret = axgbe_config_rss(pdata);
+ if (ret)
+ return ret;
axgbe_config_tso_mode(pdata);
wrapper_tx_desc_init(pdata);
ret = wrapper_rx_desc_init(pdata);
diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index 8790c858d5..97ee95a1be 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -28,6 +28,7 @@
#include <zlib.h>
#include <rte_bitops.h>
+#include <rte_random.h>
#include <rte_string_fns.h>
#include "eal_firmware.h"
@@ -6643,7 +6644,7 @@ bnx2x_config_rss_pf(struct bnx2x_softc *sc, struct ecore_rss_config_obj *rss_obj
uint8_t config_hash)
{
struct ecore_config_rss_params params = { NULL };
- uint32_t i;
+ int rc;
/*
* Although RSS is meaningless when there is a single HW queue we
@@ -6675,9 +6676,11 @@ bnx2x_config_rss_pf(struct bnx2x_softc *sc, struct ecore_rss_config_obj *rss_obj
sizeof(params.ind_table));
if (config_hash) {
-/* RSS keys */
- for (i = 0; i < sizeof(params.rss_key) / 4; i++) {
- params.rss_key[i] = (uint32_t) rte_rand();
+ /* RSS keys */
+ rc = rte_random_bytes(params.rss_key, sizeof(params.rss_key));
+ if (rc != 0) {
+ PMD_DRV_LOG(ERR, sc, "Error generating RSS hash key");
+ return rc;
}
rte_bit_relaxed_set32(ECORE_RSS_SET_SRCH, ¶ms.rss_flags);
--
2.53.0
More information about the dev
mailing list