aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2021-04-23 22:04:01 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-04-23 22:04:01 +0000
commita8286c79bad5abe4e196445ba0fd367f658c36fc (patch)
treee2e393cd7adb04f018f30c8a34836270d7421276
parent190dc59dc5f125f96eb2261d14e5b7b6f138f70b (diff)
parent23714ed84501f0b908d036bb428ff1406dbbe29d (diff)
downloadahash-android12-mainline-statsd-release.tar.gz
Use /dev/urandom instead of getrandom() am: 7e6b92bc9c am: 36d78ff4a4 am: 13bc4fb605 am: 23714ed845android-mainline-12.0.0_r99android-mainline-12.0.0_r98android-mainline-12.0.0_r97android-mainline-12.0.0_r96android-mainline-12.0.0_r95android-mainline-12.0.0_r94android-mainline-12.0.0_r93android-mainline-12.0.0_r92android-mainline-12.0.0_r91android-mainline-12.0.0_r90android-mainline-12.0.0_r9android-mainline-12.0.0_r89android-mainline-12.0.0_r88android-mainline-12.0.0_r87android-mainline-12.0.0_r86android-mainline-12.0.0_r85android-mainline-12.0.0_r84android-mainline-12.0.0_r83android-mainline-12.0.0_r82android-mainline-12.0.0_r81android-mainline-12.0.0_r80android-mainline-12.0.0_r8android-mainline-12.0.0_r79android-mainline-12.0.0_r78android-mainline-12.0.0_r77android-mainline-12.0.0_r76android-mainline-12.0.0_r75android-mainline-12.0.0_r74android-mainline-12.0.0_r73android-mainline-12.0.0_r72android-mainline-12.0.0_r71android-mainline-12.0.0_r70android-mainline-12.0.0_r7android-mainline-12.0.0_r69android-mainline-12.0.0_r68android-mainline-12.0.0_r67android-mainline-12.0.0_r66android-mainline-12.0.0_r65android-mainline-12.0.0_r64android-mainline-12.0.0_r63android-mainline-12.0.0_r62android-mainline-12.0.0_r61android-mainline-12.0.0_r60android-mainline-12.0.0_r6android-mainline-12.0.0_r59android-mainline-12.0.0_r58android-mainline-12.0.0_r57android-mainline-12.0.0_r56android-mainline-12.0.0_r53android-mainline-12.0.0_r52android-mainline-12.0.0_r51android-mainline-12.0.0_r50android-mainline-12.0.0_r5android-mainline-12.0.0_r49android-mainline-12.0.0_r48android-mainline-12.0.0_r47android-mainline-12.0.0_r46android-mainline-12.0.0_r45android-mainline-12.0.0_r44android-mainline-12.0.0_r43android-mainline-12.0.0_r42android-mainline-12.0.0_r41android-mainline-12.0.0_r40android-mainline-12.0.0_r39android-mainline-12.0.0_r38android-mainline-12.0.0_r37android-mainline-12.0.0_r35android-mainline-12.0.0_r34android-mainline-12.0.0_r33android-mainline-12.0.0_r32android-mainline-12.0.0_r31android-mainline-12.0.0_r30android-mainline-12.0.0_r3android-mainline-12.0.0_r29android-mainline-12.0.0_r28android-mainline-12.0.0_r27android-mainline-12.0.0_r26android-mainline-12.0.0_r25android-mainline-12.0.0_r24android-mainline-12.0.0_r23android-mainline-12.0.0_r22android-mainline-12.0.0_r21android-mainline-12.0.0_r20android-mainline-12.0.0_r2android-mainline-12.0.0_r19android-mainline-12.0.0_r18android-mainline-12.0.0_r17android-mainline-12.0.0_r16android-mainline-12.0.0_r15android-mainline-12.0.0_r14android-mainline-12.0.0_r13android-mainline-12.0.0_r126android-mainline-12.0.0_r125android-mainline-12.0.0_r124android-mainline-12.0.0_r123android-mainline-12.0.0_r122android-mainline-12.0.0_r121android-mainline-12.0.0_r120android-mainline-12.0.0_r12android-mainline-12.0.0_r119android-mainline-12.0.0_r118android-mainline-12.0.0_r117android-mainline-12.0.0_r116android-mainline-12.0.0_r115android-mainline-12.0.0_r114android-mainline-12.0.0_r113android-mainline-12.0.0_r110android-mainline-12.0.0_r11android-mainline-12.0.0_r109android-mainline-12.0.0_r108android-mainline-12.0.0_r107android-mainline-12.0.0_r106android-mainline-12.0.0_r105android-mainline-12.0.0_r104android-mainline-12.0.0_r103android-mainline-12.0.0_r102android-mainline-12.0.0_r101android-mainline-12.0.0_r100android-mainline-12.0.0_r10android-mainline-12.0.0_r1aml_wif_311811030aml_tz3_311312010aml_tet_311811050aml_sdk_311710000aml_pco_311011000aml_mpr_311911090aml_doc_310851020android12-mainline-wifi-releaseandroid12-mainline-tethering-releaseandroid12-mainline-statsd-releaseandroid12-mainline-sdkext-releaseandroid12-mainline-resolv-releaseandroid12-mainline-permission-releaseandroid12-mainline-neuralnetworks-releaseandroid12-mainline-networkstack-releaseandroid12-mainline-mediaprovider-releaseandroid12-mainline-media-swcodec-releaseandroid12-mainline-media-releaseandroid12-mainline-ipsec-releaseandroid12-mainline-extservices-releaseandroid12-mainline-documentsui-releaseandroid12-mainline-conscrypt-releaseandroid12-mainline-cellbroadcast-releaseandroid12-mainline-captiveportallogin-releaseandroid12-mainline-art-releaseandroid12-mainline-adbd-release
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/ahash/+/1683025 Change-Id: I5c747df98585a54a739689aa9562bf5b3b4beae3
-rw-r--r--patches/0001-Use-dev-urandom-instead-of-getrandom.patch49
-rw-r--r--src/random_state.rs13
2 files changed, 61 insertions, 1 deletions
diff --git a/patches/0001-Use-dev-urandom-instead-of-getrandom.patch b/patches/0001-Use-dev-urandom-instead-of-getrandom.patch
new file mode 100644
index 0000000..d5adff0
--- /dev/null
+++ b/patches/0001-Use-dev-urandom-instead-of-getrandom.patch
@@ -0,0 +1,49 @@
+From 5bce943cdb8fc81525257413f174844d644d63c8 Mon Sep 17 00:00:00 2001
+From: Eric Biggers <ebiggers@google.com>
+Date: Tue, 20 Apr 2021 16:48:07 -0700
+Subject: [PATCH] Use /dev/urandom instead of getrandom()
+
+To generate the ahash crate's default hash keys, use /dev/urandom
+instead of getrandom() to avoid blocking boot on systems where the
+entropy pool isn't initialized in time and where the use case of this
+crate doesn't actually require cryptographic randomness.
+
+If opening or reading from /dev/urandom fails, fall back to getrandom().
+
+Note that std::collections::HashMap doesn't block for randomness either,
+for the same reason. So this change just makes ahash work like HashMap.
+
+Bug: 185934601
+Change-Id: Ie81a1f3a893d578348db11aee114d1a8f2d9fac5
+---
+diff --git a/src/random_state.rs b/src/random_state.rs
+index 501e3eb..9b3b3d0 100644
+--- a/src/random_state.rs
++++ b/src/random_state.rs
+@@ -10,11 +10,22 @@ use core::hash::Hasher;
+ use lazy_static::*;
+ use core::sync::atomic::{AtomicUsize, Ordering};
+
++#[cfg(all(feature = "runtime-rng", not(all(feature = "compile-time-rng", test))))]
++fn read_urandom(dest: &mut [u8]) -> Result<(), std::io::Error> {
++ use std::fs::File;
++ use std::io::Read;
++
++ let mut f = File::open("/dev/urandom")?;
++ f.read_exact(dest)
++}
++
+ #[cfg(all(feature = "runtime-rng", not(all(feature = "compile-time-rng", test))))]
+ lazy_static! {
+ static ref SEEDS: [[u64; 4]; 2] = {
+ let mut result: [u8; 64] = [0; 64];
+- getrandom::getrandom(&mut result).expect("getrandom::getrandom() failed.");
++ if read_urandom(&mut result).is_err() {
++ getrandom::getrandom(&mut result).expect("getrandom::getrandom() failed.")
++ }
+ result.convert()
+ };
+ }
+--
+2.31.1.498.g6c1eba8ee3d-goog
+
diff --git a/src/random_state.rs b/src/random_state.rs
index 501e3eb..9b3b3d0 100644
--- a/src/random_state.rs
+++ b/src/random_state.rs
@@ -11,10 +11,21 @@ use lazy_static::*;
use core::sync::atomic::{AtomicUsize, Ordering};
#[cfg(all(feature = "runtime-rng", not(all(feature = "compile-time-rng", test))))]
+fn read_urandom(dest: &mut [u8]) -> Result<(), std::io::Error> {
+ use std::fs::File;
+ use std::io::Read;
+
+ let mut f = File::open("/dev/urandom")?;
+ f.read_exact(dest)
+}
+
+#[cfg(all(feature = "runtime-rng", not(all(feature = "compile-time-rng", test))))]
lazy_static! {
static ref SEEDS: [[u64; 4]; 2] = {
let mut result: [u8; 64] = [0; 64];
- getrandom::getrandom(&mut result).expect("getrandom::getrandom() failed.");
+ if read_urandom(&mut result).is_err() {
+ getrandom::getrandom(&mut result).expect("getrandom::getrandom() failed.")
+ }
result.convert()
};
}