mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-23 13:09:58 +08:00
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 184b9e530e
)
This commit is contained in:
parent
d2cbfcf1d9
commit
a036311246
2
NEWS
2
NEWS
@ -50,6 +50,8 @@ The following bugs are resolved with this release:
|
||||
saved registers
|
||||
[31429] build: Glibc failed to build with -march=x86-64-v3
|
||||
[31501] dynamic-link: _dl_tlsdesc_dynamic_xsavec may clobber %rbx
|
||||
[31612] libc: arc4random fails to fallback to /dev/urandom if
|
||||
getrandom is not present
|
||||
[31640] dynamic-link: POWER10 ld.so crashes in
|
||||
elf_machine_load_address with GCC 14
|
||||
[31676] Configuring with CC="gcc -march=x86-64-v3"
|
||||
|
@ -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 ();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user