diff --git a/src/linux_android.rs b/src/linux_android.rs index 93a64945..7c1fede4 100644 --- a/src/linux_android.rs +++ b/src/linux_android.rs @@ -3,5 +3,17 @@ use crate::{util_libc, Error}; use core::mem::MaybeUninit; pub fn getrandom_inner(dest: &mut [MaybeUninit]) -> Result<(), Error> { - util_libc::sys_fill_exact(dest, util_libc::getrandom_syscall) + util_libc::sys_fill_exact(dest, getrandom_syscall) +} + +// Also used by linux_android_with_fallback to check if the syscall is available. +pub fn getrandom_syscall(buf: &mut [MaybeUninit]) -> libc::ssize_t { + unsafe { + libc::syscall( + libc::SYS_getrandom, + buf.as_mut_ptr().cast::(), + buf.len(), + 0, + ) as libc::ssize_t + } } diff --git a/src/linux_android_with_fallback.rs b/src/linux_android_with_fallback.rs index 8b665f22..f81842e3 100644 --- a/src/linux_android_with_fallback.rs +++ b/src/linux_android_with_fallback.rs @@ -2,7 +2,7 @@ use crate::{ lazy::LazyBool, linux_android, use_file, - util_libc::{getrandom_syscall, last_os_error}, + util_libc::last_os_error, Error, }; use core::mem::MaybeUninit; @@ -18,7 +18,7 @@ pub fn getrandom_inner(dest: &mut [MaybeUninit]) -> Result<(), Error> { } fn is_getrandom_available() -> bool { - if getrandom_syscall(&mut []) < 0 { + if linux_android::getrandom_syscall(&mut []) < 0 { match last_os_error().raw_os_error() { Some(libc::ENOSYS) => false, // No kernel support // The fallback on EPERM is intentionally not done on Android since this workaround diff --git a/src/util_libc.rs b/src/util_libc.rs index 5095cf90..7708bfcc 100644 --- a/src/util_libc.rs +++ b/src/util_libc.rs @@ -99,16 +99,3 @@ pub fn open_readonly(path: &[u8]) -> Result { } } } - -/// Thin wrapper around the `getrandom()` Linux system call -#[cfg(any(target_os = "android", target_os = "linux"))] -pub fn getrandom_syscall(buf: &mut [MaybeUninit]) -> libc::ssize_t { - unsafe { - libc::syscall( - libc::SYS_getrandom, - buf.as_mut_ptr().cast::(), - buf.len(), - 0, - ) as libc::ssize_t - } -}