[dpdk-dev] [PATCH 3/6] eal: improve entropy for initial PRNG seed
Mattias Rönnblom
mattias.ronnblom at ericsson.com
Tue May 14 11:20:43 CEST 2019
Replace the use of rte_get_timer_cycles() with getentropy() for
seeding the pseudo-random number generator. getentropy() provides a
more truly random value.
Suggested-by: Stephen Hemminger <stephen at networkplumber.org>
Signed-off-by: Mattias Rönnblom <mattias.ronnblom at ericsson.com>
---
lib/librte_eal/common/rte_random.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/lib/librte_eal/common/rte_random.c b/lib/librte_eal/common/rte_random.c
index 4d3cf5226..aafc2f7ad 100644
--- a/lib/librte_eal/common/rte_random.c
+++ b/lib/librte_eal/common/rte_random.c
@@ -3,6 +3,7 @@
*/
#include <stdlib.h>
+#include <unistd.h>
#include <rte_branch_prediction.h>
#include <rte_cycles.h>
@@ -135,5 +136,14 @@ rte_rand(void)
RTE_INIT(rte_rand_init)
{
- rte_srand(rte_get_timer_cycles());
+ uint64_t seed;
+ int rc;
+
+ rc = getentropy(&seed, sizeof(seed));
+
+ /* fall back to rdtsc in case of failure */
+ if (rc < 0)
+ seed = rte_get_timer_cycles();
+
+ rte_srand(seed);
}
--
2.17.1
More information about the dev
mailing list