diff --git a/crypto/src/random.rs b/crypto/src/random.rs index abf21b674..5fe357a83 100644 --- a/crypto/src/random.rs +++ b/crypto/src/random.rs @@ -1,13 +1,12 @@ // (c) 2020-2022 ZeroTier, Inc. -- currently propritery pending actual release and licensing. See LICENSE.md. -use std::mem::MaybeUninit; use std::sync::atomic::{AtomicU64, Ordering}; use openssl::rand::rand_bytes; pub fn next_u32_secure() -> u32 { unsafe { - let mut tmp: [u32; 1] = MaybeUninit::uninit().assume_init(); + let mut tmp = [0u32; 1]; assert!(rand_bytes(&mut *(tmp.as_mut_ptr().cast::<[u8; 4]>())).is_ok()); tmp[0] } @@ -15,7 +14,7 @@ pub fn next_u32_secure() -> u32 { pub fn next_u64_secure() -> u64 { unsafe { - let mut tmp: [u64; 1] = MaybeUninit::uninit().assume_init(); + let mut tmp = [0u64; 1]; assert!(rand_bytes(&mut *(tmp.as_mut_ptr().cast::<[u8; 8]>())).is_ok()); tmp[0] } @@ -23,7 +22,7 @@ pub fn next_u64_secure() -> u64 { pub fn next_u128_secure() -> u128 { unsafe { - let mut tmp: [u128; 1] = MaybeUninit::uninit().assume_init(); + let mut tmp = [0u128; 1]; assert!(rand_bytes(&mut *(tmp.as_mut_ptr().cast::<[u8; 16]>())).is_ok()); tmp[0] } @@ -36,7 +35,7 @@ pub fn fill_bytes_secure(dest: &mut [u8]) { #[inline(always)] pub fn get_bytes_secure() -> [u8; COUNT] { - let mut tmp: [u8; COUNT] = unsafe { MaybeUninit::uninit().assume_init() }; + let mut tmp = [0u8; COUNT]; assert!(rand_bytes(&mut tmp).is_ok()); tmp } diff --git a/network-hypervisor/src/protocol.rs b/network-hypervisor/src/protocol.rs index f6851a5b3..2dfa781f0 100644 --- a/network-hypervisor/src/protocol.rs +++ b/network-hypervisor/src/protocol.rs @@ -326,7 +326,7 @@ pub mod v1 { #[inline(always)] pub fn aes_gmac_siv_tag(&self) -> [u8; 16] { - let mut id = unsafe { MaybeUninit::<[u8; 16]>::uninit().assume_init() }; + let mut id = 0u128.to_ne_bytes(); id[0..8].copy_from_slice(&self.id); id[8..16].copy_from_slice(&self.mac); id @@ -335,7 +335,7 @@ pub mod v1 { #[inline(always)] pub fn get_packet_aad_bytes(destination: Address, source: Address, flags_cipher_hops: u8) -> [u8; 11] { - let mut id = unsafe { MaybeUninit::<[u8; 11]>::uninit().assume_init() }; + let mut id = [0u8; 11]; id[0..5].copy_from_slice(&destination.to_bytes()); id[5..10].copy_from_slice(&source.to_bytes()); id[10] = flags_cipher_hops & FLAGS_FIELD_MASK_HIDE_HOPS; @@ -530,7 +530,7 @@ pub mod v1 { /// (including the verb) is returned. pub fn compress(payload: &mut [u8]) -> usize { if payload.len() > 32 { - let mut tmp: [u8; 65536] = unsafe { MaybeUninit::uninit().assume_init() }; + let mut tmp = [0u8; 65536]; if let Ok(mut compressed_size) = lz4_flex::block::compress_into(&payload[1..], &mut tmp) { if compressed_size < (payload.len() - 1) { payload[0] |= VERB_FLAG_COMPRESSED; diff --git a/utils/src/ringbuffer.rs b/utils/src/ringbuffer.rs index a5ab34dbd..95b1d0e4b 100644 --- a/utils/src/ringbuffer.rs +++ b/utils/src/ringbuffer.rs @@ -11,6 +11,7 @@ pub struct RingBuffer { impl RingBuffer { #[inline] pub fn new() -> Self { + #[allow(invalid_value)] let mut tmp: Self = unsafe { MaybeUninit::uninit().assume_init() }; tmp.p = 0; tmp diff --git a/utils/src/ringbuffermap.rs b/utils/src/ringbuffermap.rs index e9038d181..681358f76 100644 --- a/utils/src/ringbuffermap.rs +++ b/utils/src/ringbuffermap.rs @@ -114,6 +114,7 @@ impl RingBu pub fn new(salt: u32) -> Self { debug_assert!(C <= EMPTY as usize); debug_assert!(B <= EMPTY as usize); + #[allow(invalid_value)] let mut tmp: Self = unsafe { MaybeUninit::uninit().assume_init() }; // EMPTY is the maximum value of the indices, which is all 0xff, so this sets all indices to EMPTY. unsafe { std::ptr::write_bytes(&mut tmp, 0xff, 1) };