From a9f2926ac626c881e60dcde2b933113fc73ab4f4 Mon Sep 17 00:00:00 2001 From: Joe Richey Date: Sat, 2 Apr 2022 13:47:33 -0700 Subject: [PATCH] Add notes when various functions were added Signed-off-by: Joe Richey --- src/bsd_arandom.rs | 1 + src/dragonfly.rs | 1 + src/linux_android.rs | 1 + src/macos.rs | 1 + src/openbsd.rs | 1 + src/solaris_illumos.rs | 1 + src/windows.rs | 1 + 7 files changed, 7 insertions(+) diff --git a/src/bsd_arandom.rs b/src/bsd_arandom.rs index f26f2609c..87ec56410 100644 --- a/src/bsd_arandom.rs +++ b/src/bsd_arandom.rs @@ -31,6 +31,7 @@ fn kern_arnd(buf: &mut [u8]) -> libc::ssize_t { } pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> { + // getrandom(2) was introduces in FreeBSD 12.0 and NetBsd 10.0 #[cfg(target_os = "freebsd")] { use crate::util_libc::Weak; diff --git a/src/dragonfly.rs b/src/dragonfly.rs index f27e90690..8daaa4048 100644 --- a/src/dragonfly.rs +++ b/src/dragonfly.rs @@ -17,6 +17,7 @@ pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> { static GETRANDOM: Weak = unsafe { Weak::new("getrandom\0") }; type GetRandomFn = unsafe extern "C" fn(*mut u8, libc::size_t, libc::c_uint) -> libc::ssize_t; + // getrandom(2) was introduced in DragonflyBSD 5.7 if let Some(fptr) = GETRANDOM.ptr() { let func: GetRandomFn = unsafe { core::mem::transmute(fptr) }; return sys_fill_exact(dest, |buf| unsafe { func(buf.as_mut_ptr(), buf.len(), 0) }); diff --git a/src/linux_android.rs b/src/linux_android.rs index 5508fdd06..4270b67c6 100644 --- a/src/linux_android.rs +++ b/src/linux_android.rs @@ -14,6 +14,7 @@ use crate::{ }; pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> { + // getrandom(2) was introduced in Linux 3.17 static HAS_GETRANDOM: LazyBool = LazyBool::new(); if HAS_GETRANDOM.unsync_init(is_getrandom_available) { sys_fill_exact(dest, |buf| unsafe { diff --git a/src/macos.rs b/src/macos.rs index 585a35abd..671a053bf 100644 --- a/src/macos.rs +++ b/src/macos.rs @@ -17,6 +17,7 @@ use core::mem; type GetEntropyFn = unsafe extern "C" fn(*mut u8, libc::size_t) -> libc::c_int; pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> { + // getentropy(2) was added in 10.12, Rust supports 10.7+ static GETENTROPY: Weak = unsafe { Weak::new("getentropy\0") }; if let Some(fptr) = GETENTROPY.ptr() { let func: GetEntropyFn = unsafe { mem::transmute(fptr) }; diff --git a/src/openbsd.rs b/src/openbsd.rs index c8d28b3d8..41371736f 100644 --- a/src/openbsd.rs +++ b/src/openbsd.rs @@ -10,6 +10,7 @@ use crate::{util_libc::last_os_error, Error}; pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> { + // getentropy(2) was added in OpenBSD 5.6, so we can use it unconditionally. for chunk in dest.chunks_mut(256) { let ret = unsafe { libc::getentropy(chunk.as_mut_ptr() as *mut libc::c_void, chunk.len()) }; if ret == -1 { diff --git a/src/solaris_illumos.rs b/src/solaris_illumos.rs index 2d1b767bb..cf3067d6d 100644 --- a/src/solaris_illumos.rs +++ b/src/solaris_illumos.rs @@ -30,6 +30,7 @@ type GetRandomFn = unsafe extern "C" fn(*mut u8, libc::size_t, libc::c_uint) -> type GetRandomFn = unsafe extern "C" fn(*mut u8, libc::size_t, libc::c_uint) -> libc::c_int; pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> { + // getrandom(2) was introduced in Solaris 11.3 for Illumos in 2015. static GETRANDOM: Weak = unsafe { Weak::new("getrandom\0") }; if let Some(fptr) = GETRANDOM.ptr() { let func: GetRandomFn = unsafe { mem::transmute(fptr) }; diff --git a/src/windows.rs b/src/windows.rs index 643badd07..41dc37a5c 100644 --- a/src/windows.rs +++ b/src/windows.rs @@ -24,6 +24,7 @@ extern "system" { pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> { // Prevent overflow of u32 for chunk in dest.chunks_mut(u32::max_value() as usize) { + // BCryptGenRandom was introduced in Windows Vista let ret = unsafe { BCryptGenRandom( ptr::null_mut(),