diff options
| author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2024-04-05 10:27:29 -0300 |
|---|---|---|
| committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2024-07-08 10:23:10 -0300 |
| commit | a03631124602f2dcef40d46660b96d2e51c44bfd (patch) | |
| tree | 9a6009db7fe617f6f64fd5002a473c6a06225018 /stdlib | |
| parent | d2cbfcf1d9a4b539007fe04d33e0bdb82d02a2f2 (diff) | |
| download | glibc-a03631124602f2dcef40d46660b96d2e51c44bfd.tar.xz glibc-a03631124602f2dcef40d46660b96d2e51c44bfd.zip | |
stdlib: fix arc4random fallback to /dev/urandom (BZ 31612)
The __getrandom_nocancel used by __arc4random_buf uses
INLINE_SYSCALL_CALL (which returns -1/errno) and the loop checks for
the return value instead of errno to fallback to /dev/urandom.
The malloc code now uses __getrandom_nocancel_nostatus, which uses
INTERNAL_SYSCALL_CALL, so there is no need to use the variant that does
not set errno (BZ#29624).
Checked on x86_64-linux-gnu.
Reviewed-by: Xi Ruoyao <xry111@xry111.site>
(cherry picked from commit 184b9e530e6326e668709826903b6d30dc6cac3f)
Diffstat (limited to 'stdlib')
| -rw-r--r-- | stdlib/arc4random.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/stdlib/arc4random.c b/stdlib/arc4random.c index 3ae8fc1302..7818cb9cf6 100644 --- a/stdlib/arc4random.c +++ b/stdlib/arc4random.c @@ -51,7 +51,7 @@ __arc4random_buf (void *p, size_t n) n -= l; continue; /* Interrupted by a signal; keep going. */ } - else if (l == -ENOSYS) + else if (l < 0 && errno == ENOSYS) break; /* No syscall, so fallback to /dev/urandom. */ arc4random_getrandom_failure (); } |
