diff --git a/src/syscalls/random.rs b/src/syscalls/random.rs index deeea0a86341e6a4237e8789bff7f4b0e5b9e7db..085a5af6b45d7e2f83f049b785a877583fd900ce 100644 --- a/src/syscalls/random.rs +++ b/src/syscalls/random.rs @@ -11,13 +11,19 @@ fn generate_park_miller_lehmer_random_number() -> u32 { random } -extern "C" fn __sys_rand32(value: &mut u32) -> i32 { - *value = try_sys!(arch::processor::generate_random_number32().ok_or("sys_rand32 failed")); +unsafe extern "C" fn __sys_rand32(value: *mut u32) -> i32 { + let rand = try_sys!(arch::processor::generate_random_number32().ok_or("sys_rand32 failed")); + unsafe { + value.write(rand); + } 0 } -extern "C" fn __sys_rand64(value: &mut u64) -> i32 { - *value = try_sys!(arch::processor::generate_random_number64().ok_or("sys_rand64 failed")); +unsafe extern "C" fn __sys_rand64(value: *mut u64) -> i32 { + let rand = try_sys!(arch::processor::generate_random_number64().ok_or("sys_rand64 failed")); + unsafe { + value.write(rand); + } 0 } @@ -30,7 +36,7 @@ extern "C" fn __sys_rand() -> u32 { /// the function returns `None`. #[cfg(not(feature = "newlib"))] #[no_mangle] -pub extern "C" fn sys_secure_rand32(value: &mut u32) -> i32 { +pub unsafe extern "C" fn sys_secure_rand32(value: *mut u32) -> i32 { kernel_function!(__sys_rand32(value)) } @@ -39,7 +45,7 @@ pub extern "C" fn sys_secure_rand32(value: &mut u32) -> i32 { /// the function returns `None`. #[cfg(not(feature = "newlib"))] #[no_mangle] -pub extern "C" fn sys_secure_rand64(value: &mut u64) -> i32 { +pub unsafe extern "C" fn sys_secure_rand64(value: *mut u64) -> i32 { kernel_function!(__sys_rand64(value)) }