Skip to content

Commit

Permalink
Move getrandom_syscall from util_libc to linux_android.
Browse files Browse the repository at this point in the history
  • Loading branch information
briansmith committed Jun 6, 2024
1 parent 45781c7 commit 593a9ce
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 21 deletions.
14 changes: 13 additions & 1 deletion src/linux_android.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,17 @@ use crate::{util_libc, Error};
use core::mem::MaybeUninit;

pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> 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<u8>]) -> libc::ssize_t {
unsafe {
libc::syscall(
libc::SYS_getrandom,
buf.as_mut_ptr().cast::<core::ffi::c_void>(),
buf.len(),
0,
) as libc::ssize_t
}
}
9 changes: 2 additions & 7 deletions src/linux_android_with_fallback.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
//! Implementation for Linux / Android with `/dev/urandom` fallback
use crate::{
lazy::LazyBool,
linux_android, use_file,
util_libc::{getrandom_syscall, last_os_error},
Error,
};
use crate::{lazy::LazyBool, linux_android, use_file, util_libc::last_os_error, Error};
use core::mem::MaybeUninit;

pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
Expand All @@ -18,7 +13,7 @@ pub fn getrandom_inner(dest: &mut [MaybeUninit<u8>]) -> 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
Expand Down
13 changes: 0 additions & 13 deletions src/util_libc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,16 +99,3 @@ pub fn open_readonly(path: &[u8]) -> Result<libc::c_int, Error> {
}
}
}

/// Thin wrapper around the `getrandom()` Linux system call
#[cfg(any(target_os = "android", target_os = "linux"))]
pub fn getrandom_syscall(buf: &mut [MaybeUninit<u8>]) -> libc::ssize_t {
unsafe {
libc::syscall(
libc::SYS_getrandom,
buf.as_mut_ptr().cast::<core::ffi::c_void>(),
buf.len(),
0,
) as libc::ssize_t
}
}

0 comments on commit 593a9ce

Please sign in to comment.