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 <[email protected]> --- 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

