[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, &params, ~0UL);
> -      if (! INTERNAL_SYSCALL_ERROR_P (ret))
> +      if (ret == 0)

LGTM.


More information about the Libc-alpha mailing list