diff options
| author | bors <bors@rust-lang.org> | 2023-11-15 21:47:54 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-11-15 21:47:54 +0000 |
| commit | 012bd49b8a60f02d504774293d7a381dfe74d5f4 (patch) | |
| tree | 35c5f817713863844a2d7c1f9e5a1e1585343599 | |
| parent | 31e62a923d0e98d256a17112cd8668956033c2b5 (diff) | |
| parent | c3fd57d1852b79ed407bc067742c57a681e4b23e (diff) | |
| download | rust-012bd49b8a60f02d504774293d7a381dfe74d5f4.tar.gz rust-012bd49b8a60f02d504774293d7a381dfe74d5f4.zip | |
Auto merge of #3164 - devnexen:fbsd_upd3, r=RalfJung
freebsd adding getrandom interception. note that os support was added in same time as getentropy.
| -rwxr-xr-x | src/tools/miri/ci.sh | 2 | ||||
| -rw-r--r-- | src/tools/miri/src/shims/unix/freebsd/foreign_items.rs | 15 | ||||
| -rw-r--r-- | src/tools/miri/tests/pass-dep/shims/libc-getrandom.rs | 5 |
3 files changed, 20 insertions, 2 deletions
diff --git a/src/tools/miri/ci.sh b/src/tools/miri/ci.sh index ff45dc6a42a..5c6351d0192 100755 --- a/src/tools/miri/ci.sh +++ b/src/tools/miri/ci.sh @@ -108,7 +108,7 @@ case $HOST_TARGET in MIRI_TEST_TARGET=aarch64-unknown-linux-gnu run_tests MIRI_TEST_TARGET=aarch64-apple-darwin run_tests MIRI_TEST_TARGET=i686-pc-windows-gnu run_tests - MIRI_TEST_TARGET=x86_64-unknown-freebsd run_tests_minimal hello integer vec panic/panic concurrency/simple pthreads libc-getentropy atomic env/var + MIRI_TEST_TARGET=x86_64-unknown-freebsd run_tests_minimal hello integer vec panic/panic concurrency/simple pthreads libc-getentropy libc-getrandom atomic env/var MIRI_TEST_TARGET=aarch64-linux-android run_tests_minimal hello integer vec panic/panic MIRI_TEST_TARGET=wasm32-wasi run_tests_minimal no_std integer strings wasm MIRI_TEST_TARGET=wasm32-unknown-unknown run_tests_minimal no_std integer strings wasm diff --git a/src/tools/miri/src/shims/unix/freebsd/foreign_items.rs b/src/tools/miri/src/shims/unix/freebsd/foreign_items.rs index 96e322c4cf5..7c843e106ea 100644 --- a/src/tools/miri/src/shims/unix/freebsd/foreign_items.rs +++ b/src/tools/miri/src/shims/unix/freebsd/foreign_items.rs @@ -47,6 +47,21 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> { this.read_scalar(len)?, )?; } + "getrandom" => { + let [ptr, len, flags] = + this.check_shim(abi, Abi::C { unwind: false }, link_name, args)?; + let ptr = this.read_pointer(ptr)?; + let len = this.read_target_usize(len)?; + let _flags = this.read_scalar(flags)?.to_i32()?; + // flags on freebsd does not really matter + // in practice, GRND_RANDOM does not particularly draw from /dev/random + // since it is the same as to /dev/urandom. + // GRND_INSECURE is only an alias of GRND_NONBLOCK, which + // does not affect the RNG. + // https://man.freebsd.org/cgi/man.cgi?query=getrandom&sektion=2&n=1 + this.gen_random(ptr, len)?; + this.write_scalar(Scalar::from_target_usize(len, this), dest)?; + } // errno "__error" => { diff --git a/src/tools/miri/tests/pass-dep/shims/libc-getrandom.rs b/src/tools/miri/tests/pass-dep/shims/libc-getrandom.rs index a1436c7319d..9c670cbd507 100644 --- a/src/tools/miri/tests/pass-dep/shims/libc-getrandom.rs +++ b/src/tools/miri/tests/pass-dep/shims/libc-getrandom.rs @@ -1,10 +1,12 @@ -//@only-target-linux +//@ignore-target-windows: no libc +//@ignore-target-apple: no getrandom use std::ptr; fn main() { let mut buf = [0u8; 5]; unsafe { + #[cfg(target_os = "linux")] assert_eq!( libc::syscall( libc::SYS_getrandom, @@ -14,6 +16,7 @@ fn main() { ), 0, ); + #[cfg(target_os = "linux")] assert_eq!( libc::syscall( libc::SYS_getrandom, |
