[PATCH v2] rust: Add support for feeding entropy to randomness pool

Matthew Maurer posted 1 patch 19 hours ago
rust/kernel/lib.rs  |  1 +
rust/kernel/rand.rs | 19 +++++++++++++++++++
2 files changed, 20 insertions(+)
[PATCH v2] rust: Add support for feeding entropy to randomness pool
Posted by Matthew Maurer 19 hours ago
Adds just enough support to allow device drivers to feed entropy to the
central pool.

Signed-off-by: Matthew Maurer <mmaurer@google.com>
---
Changes in v2:
- Added more details in the docs about the API, specifically about it
  not crediting entropy and when it ought to be used.
- Link to v1: https://lore.kernel.org/r/20251212-add-entropy-v1-1-e70ad1bc9c65@google.com
---
 rust/kernel/lib.rs  |  1 +
 rust/kernel/rand.rs | 19 +++++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
index f812cf12004286962985a068665443dc22c389a2..bf64752d276b0bdea06ac0de8a5e219190129377 100644
--- a/rust/kernel/lib.rs
+++ b/rust/kernel/lib.rs
@@ -130,6 +130,7 @@
 pub mod ptr;
 #[cfg(CONFIG_RUST_PWM_ABSTRACTIONS)]
 pub mod pwm;
+pub mod rand;
 pub mod rbtree;
 pub mod regulator;
 pub mod revocable;
diff --git a/rust/kernel/rand.rs b/rust/kernel/rand.rs
new file mode 100644
index 0000000000000000000000000000000000000000..abaafa12c6ec7fe600463dfc2bdb78385a09cc52
--- /dev/null
+++ b/rust/kernel/rand.rs
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! Randomness.
+//!
+//! C header: [`include/linux/random.h`](../../../../include/linux/random.h)
+
+use crate::bindings;
+use crate::ffi::c_void;
+
+/// Adds the given buffer to the entropy pool, but does not credit any entropy.
+///
+/// This is intended for use mixing in data that is likely to differ between devices or boots, but
+/// may otherwise be predictable. Examples include MAC addresses or RTC values. This slightly
+/// improves randomness in entropy-constrained environments (especially common for embedded
+/// devices).
+pub fn add_device_randomness(buf: &[u8]) {
+    // SAFETY: We just need the pointer to be valid for the length, which a slice provides.
+    unsafe { bindings::add_device_randomness(buf.as_ptr().cast::<c_void>(), buf.len()) };
+}

---
base-commit: 008d3547aae5bc86fac3eda317489169c3fda112
change-id: 20251029-add-entropy-f57e12ebe110

Best regards,
-- 
Matthew Maurer <mmaurer@google.com>