vmbase: Replace CRYPTO_sysrand() with getentropy()
As the library is replacing the internal CRYPTO_sysrand() functions with
the more standard getentropy, expose our source of entropy through the
new symbol.
Bug: 290898063
Bug: 291102972
Test: -
Change-Id: I7e42a51b15aef14800bc82dca8cd67df5b5730cb
diff --git a/vmbase/src/bionic.rs b/vmbase/src/bionic.rs
index 29fa0ff..f8db1fe 100644
--- a/vmbase/src/bionic.rs
+++ b/vmbase/src/bionic.rs
@@ -24,9 +24,11 @@
use crate::console;
use crate::cstr;
use crate::eprintln;
+use crate::rand::fill_with_entropy;
use crate::read_sysreg;
const EOF: c_int = -1;
+const EIO: c_int = 5;
/// Bionic thread-local storage.
#[repr(C)]
@@ -85,6 +87,21 @@
unsafe { ERRNO }
}
+#[no_mangle]
+extern "C" fn getentropy(buffer: *mut c_void, length: usize) -> c_int {
+ if length > 256 {
+ // The maximum permitted value for the length argument is 256.
+ set_errno(EIO);
+ return -1;
+ }
+
+ // SAFETY: Just like libc, we need to assume that `ptr` is valid.
+ let buffer = unsafe { slice::from_raw_parts_mut(buffer.cast::<u8>(), length) };
+ fill_with_entropy(buffer).unwrap();
+
+ 0
+}
+
/// Reports a fatal error detected by Bionic.
///
/// # Safety