[PATCH 10/18] ipsec: use secure random for SAD hash seed

Stephen Hemminger stephen at networkplumber.org
Tue Sep 15 21:21:08 CEST 2026


The hash initial value for the security association database was
taken from rte_rand(). A predictable hash seed lets an attacker pick
SPI values that collide in the same bucket and degrade lookups.

Use rte_random_bytes(), which is done once when the database is
created.

Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
 lib/ipsec/ipsec_sad.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lib/ipsec/ipsec_sad.c b/lib/ipsec/ipsec_sad.c
index 15ea868f77..0ea797604e 100644
--- a/lib/ipsec/ipsec_sad.c
+++ b/lib/ipsec/ipsec_sad.c
@@ -300,7 +300,12 @@ rte_ipsec_sad_create(const char *name, const struct rte_ipsec_sad_conf *conf)
 	memcpy(sad->name, sad_name, sizeof(sad_name));
 
 	hash_params.hash_func = DEFAULT_HASH_FUNC;
-	hash_params.hash_func_init_val = rte_rand();
+	if (rte_random_bytes(&hash_params.hash_func_init_val,
+			     sizeof(hash_params.hash_func_init_val)) != 0) {
+		rte_free(sad);
+		rte_errno = EIO;
+		return NULL;
+	}
 	sad->init_val = hash_params.hash_func_init_val;
 	hash_params.socket_id = conf->socket_id;
 	hash_params.name = hash_name;
-- 
2.53.0



More information about the dev mailing list