From e4dd3bddd1953a70302243a51526917f986d471f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20R=C3=B6nnblom?= Date: Fri, 28 Jun 2019 23:08:46 +0200 Subject: [PATCH] eal: use 32-bit RDSEED to allow 32-bit x86 usage MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When seeding the pseudo-random number generator, replace the 64-bit RDSEED with two 32-bit RDSEED instructions to allow building and running on 32-bit x86. Fixes: faf8fd252785 ("eal: improve entropy for initial PRNG seed") Reported-by: Ferruh Yigit Signed-off-by: Mattias Rönnblom --- lib/librte_eal/common/rte_random.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/librte_eal/common/rte_random.c b/lib/librte_eal/common/rte_random.c index 3d9b9b7d83..f51708b308 100644 --- a/lib/librte_eal/common/rte_random.c +++ b/lib/librte_eal/common/rte_random.c @@ -189,14 +189,13 @@ __rte_random_initial_seed(void) return ge_seed; #endif #ifdef RTE_MACHINE_CPUFLAG_RDSEED - unsigned int rdseed_rc; - unsigned long long rdseed_seed; + unsigned int rdseed_low; + unsigned int rdseed_high; /* first fallback: rdseed instruction, if available */ - rdseed_rc = _rdseed64_step(&rdseed_seed); - - if (rdseed_rc == 1) - return (uint64_t)rdseed_seed; + if (_rdseed32_step(&rdseed_low) == 1 && + _rdseed32_step(&rdseed_high) == 1) + return (uint64_t)rdseed_low | ((uint64_t)rdseed_high << 32); #endif /* second fallback: seed using rdtsc */ return rte_get_timer_cycles(); -- 2.20.1