[PATCH v2] Linux: Also check for 0 return value from vDSO gerandom probe
Jason A. Donenfeld
Jason@zx2c4.com
Sun Dec 15 13:49:31 GMT 2024
On Sun, Dec 15, 2024 at 01:55:56PM +0100, Florian Weimer wrote:
> As of Linux 6.13, there is no code in the vDSO that declines this
> initialization request with the special ~0UL state size. If the vDSO
> has the function, the call succeeds and returns 0. It's expected
> that the code would follow the “a negative value indicating an error”
> convention, as indicated in the __cvdso_getrandom_data function
> comment, so that INTERNAL_SYSCALL_ERROR_P on glibc's side would return
> true. This commit changes the commit to check for zero to indicate
> success instead, which covers potential future non-zero success
> return values and error returns.
>
> Fixes commit 4f5704ea347e52ac3f272d1341da10aed6e9973e ("powerpc: Use
> correct procedure call standard for getrandom vDSO call (bug 32440)").
>
> Tested on x86_64-linux-gnu.
>
> ---
> v2: Only check for 0.
> sysdeps/unix/sysv/linux/getrandom.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sysdeps/unix/sysv/linux/getrandom.c b/sysdeps/unix/sysv/linux/getrandom.c
> index 0dc8fa6e65..d3eab66a1a 100644
> --- a/sysdeps/unix/sysv/linux/getrandom.c
> +++ b/sysdeps/unix/sysv/linux/getrandom.c
> @@ -246,7 +246,7 @@ __getrandom_early_init (_Bool initial)
> } params;
> long int ret = INTERNAL_VSYSCALL_CALL (GLRO(dl_vdso_getrandom),
> 5, NULL, 0, 0, ¶ms, ~0UL);
> - if (! INTERNAL_SYSCALL_ERROR_P (ret))
> + if (ret == 0)
LGTM.
More information about the Libc-alpha
mailing list