[PATCH v2] Linux: Also check for 0 return value from vDSO gerandom probe

Jason A. Donenfeld Jason@zx2c4.com
Mon Dec 16 20:11:33 GMT 2024


On Sun, Dec 15, 2024 at 1:56 PM Florian Weimer <fweimer@redhat.com> wrote:
> As of Linux 6.13, there is no code in the vDSO that declines this
> initialization request with the special ~0UL state size.

Sorry I didn't point this out earlier, but it doesn't really matter
because it's just a commit text thing. But just for your curiosity,
there is error path code in the form of:

ssize_t __kernel_getrandom(void *buffer, size_t len, unsigned int
flags, void *opaque_state, size_t opaque_len)
{
       if (alternative_has_cap_likely(ARM64_HAS_FPSIMD))
               return __cvdso_getrandom(buffer, len, flags,
opaque_state, opaque_len);
       if (unlikely(opaque_len == ~0UL && !buffer && !len && !flags))
               return -ENOSYS;
       return getrandom_syscall(buffer, len, flags);
}

and

ssize_t __kernel_getrandom(void *buffer, size_t len, unsigned int
flags, void *opaque_state, size_t opaque_len)
{
       if (test_facility(129))
               return __cvdso_getrandom(buffer, len, flags,
opaque_state, opaque_len);
       if (unlikely(opaque_len == ~0UL && !buffer && !len && !flags))
               return -ENOSYS;
       return getrandom_syscall(buffer, len, flags);
}

on arm64 and s390x, respectively. This is just fallback code for rare hardware.

Jason


More information about the Libc-alpha mailing list