mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-12 22:41:03 +01:00
BUG/MEDIUM: random: align the state on 2*64 bits for ARM64
x86_64 and ARM64 do support the double-word atomic CAS. However on
ARM it must be done only on aligned data. The random generator makes
use of such double-word atomic CAS when available but didn't enforce
alignment, which causes ARM64 to crash early in the startup since
commit 52bf839 ("BUG/MEDIUM: random: implement a thread-safe and
process-safe PRNG").
This commit just unconditionally aligns the arrays. It must be
backported to all branches where the commit above is backported
(likely till 2.0).
This commit is contained in:
parent
84fd8a77b7
commit
1544c14c57
@ -4530,7 +4530,7 @@ int varint_bytes(uint64_t v)
|
|||||||
|
|
||||||
|
|
||||||
/* Random number generator state, see below */
|
/* Random number generator state, see below */
|
||||||
static uint64_t ha_random_state[2];
|
static uint64_t ha_random_state[2] ALIGNED(2*sizeof(uint64_t));
|
||||||
|
|
||||||
/* This is a thread-safe implementation of xoroshiro128** described below:
|
/* This is a thread-safe implementation of xoroshiro128** described below:
|
||||||
* http://prng.di.unimi.it/
|
* http://prng.di.unimi.it/
|
||||||
@ -4542,8 +4542,8 @@ static uint64_t ha_random_state[2];
|
|||||||
uint64_t ha_random64()
|
uint64_t ha_random64()
|
||||||
{
|
{
|
||||||
uint64_t result;
|
uint64_t result;
|
||||||
uint64_t old[2];
|
uint64_t old[2] ALIGNED(2*sizeof(uint64_t));
|
||||||
uint64_t new[2];
|
uint64_t new[2] ALIGNED(2*sizeof(uint64_t));
|
||||||
|
|
||||||
#if defined(USE_THREAD) && (!defined(HA_CAS_IS_8B) || !defined(HA_HAVE_CAS_DW))
|
#if defined(USE_THREAD) && (!defined(HA_CAS_IS_8B) || !defined(HA_HAVE_CAS_DW))
|
||||||
static HA_SPINLOCK_T rand_lock;
|
static HA_SPINLOCK_T rand_lock;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user