[PATCH 1/2] stdlib: Fix unintended change to the random_r implementation

Sam James sam@gentoo.org
Mon Jan 20 20:51:58 GMT 2025


Florian Weimer <fweimer@redhat.com> writes:

> Commit d5bceac99d24af1131b90027dab267e437b65cd1 changed the sequence
> of random numbers.  This was completely unintended.  The statistical
> properties of the new sequences are unclear, so restore the old
> behavior.
>
> Fixes commit d5bceac99d24af1131b90027dab267e437b65cd1 ("stdlib:
> random_r: fix unaligned access in initstate and initstate_r
> [BZ #30584]").
> ---
>  stdlib/random_r.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)

Thanks for fixing that. For future, could you please CC for fixups?

>
> diff --git a/stdlib/random_r.c b/stdlib/random_r.c
> index 605e96983c..b49f03f5be 100644
> --- a/stdlib/random_r.c
> +++ b/stdlib/random_r.c
> @@ -390,9 +390,10 @@ __random_r (struct random_data *buf, int32_t *result)
>        int32_t *end_ptr = buf->end_ptr;
>        uint32_t val;
>  
> -      val = read_state (rptr, 0);
> -      int32_t t = read_state (fptr, 0);
> -      write_state (fptr, 0, t + val);
> +      /* Avoid integer overflow with uint32_t arihmetic.  */
> +      val = read_state (fptr, 0);
> +      val += read_state (rptr, 0);
> +      write_state (fptr, 0, val);
>        /* Chucking least random bit.  */
>        *result = val >> 1;
>        ++fptr;
>
> base-commit: a3131e71cf65c0c28869824de9b1b1fab363882c


More information about the Libc-alpha mailing list