diff --git a/src/uu/mktemp/src/mktemp.rs b/src/uu/mktemp/src/mktemp.rs index de34624f629..669e6095a3b 100644 --- a/src/uu/mktemp/src/mktemp.rs +++ b/src/uu/mktemp/src/mktemp.rs @@ -24,6 +24,8 @@ use std::fs; use std::os::unix::prelude::PermissionsExt; use rand::Rng; +use rand::SeedableRng; +use rand::rngs::SmallRng; use tempfile::Builder; use thiserror::Error; @@ -510,7 +512,12 @@ fn dry_exec(tmpdir: &Path, prefix: &str, rand: usize, suffix: &str) -> PathBuf { // Randomize. let bytes = &mut buf[prefix.len()..prefix.len() + rand]; - rand::rng().fill(bytes); + SmallRng::try_from_os_rng() + .unwrap_or_else(|_| { + //rand::rng panics if getrandom failed + SmallRng::seed_from_u64(bytes.as_ptr() as usize as u64) + }) + .fill(bytes); for byte in bytes { *byte = match *byte % 62 { v @ 0..=9 => v + b'0',