[v3] eal: fix crash when the random init
Checks
Commit Message
From: Tonghao Zhang <xiangxia.m.yue@gmail.com>
When rte_rand_init is invoked, and the kernel running dpdk does't
support *getentropy, at the same time, the cpu does't support rdseed,
then rte_rand_init invoked rte_get_timer_cycles.
If HPET was enabled in the DPDK build (CONFIG_RTE_LIBEAL_USE_HPET=y).
rte_get_timer_cycles will invoke rte_get_hpet_cycles while *eal_hpet
is not available.
To fix that, use rte_get_tsc_cycles instead of rte_get_timer_cycles.
Fixes: faf8fd252785 ("eal: improve entropy for initial PRNG seed")
Fixes: 3f002f069612 ("eal: replace libc-based random generation with LFSR")
Cc: stable@dpdk.org
Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
Acked-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
---
v3:
* add more info in commit log and fix a typo
v2:
* use rte_get_tsc_cycles instead of rte_get_timer_cycles
---
lib/librte_eal/common/rte_random.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
On Fri, Apr 17, 2020 at 1:37 PM <xiangxia.m.yue@gmail.com> wrote:
>
> From: Tonghao Zhang <xiangxia.m.yue@gmail.com>
>
> When rte_rand_init is invoked, and the kernel running dpdk does't
> support *getentropy, at the same time, the cpu does't support rdseed,
> then rte_rand_init invoked rte_get_timer_cycles.
>
> If HPET was enabled in the DPDK build (CONFIG_RTE_LIBEAL_USE_HPET=y).
> rte_get_timer_cycles will invoke rte_get_hpet_cycles while *eal_hpet
> is not available.
>
> To fix that, use rte_get_tsc_cycles instead of rte_get_timer_cycles.
>
> Fixes: 3f002f069612 ("eal: replace libc-based random generation with LFSR")
> Cc: stable@dpdk.org
>
> Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
> Acked-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
Applied, thanks.
@@ -198,7 +198,7 @@ struct rte_rand_state *__rte_rand_get_state(void)
return (uint64_t)rdseed_low | ((uint64_t)rdseed_high << 32);
#endif
/* second fallback: seed using rdtsc */
- return rte_get_timer_cycles();
+ return rte_get_tsc_cycles();
}
RTE_INIT(rte_rand_init)