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

Matthew Maurer posted 1 patch 1 month, 1 week ago
There is a newer version of this series
rust/kernel/lib.rs    |  1 +
rust/kernel/random.rs | 17 +++++++++++++++++
2 files changed, 18 insertions(+)
[PATCH v4] rust: Add support for feeding entropy to randomness pool
Posted by Matthew Maurer 1 month, 1 week ago
Adds just enough support to allow device drivers to feed entropy to the
central pool.

Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Matthew Maurer <mmaurer@google.com>
---
Changes in v4:
- Adjusted documentation phrasing.
- Renamed module from `rand` to `random` to be more in line with the
  header name.
- Link to v3: https://lore.kernel.org/r/20251226-add-entropy-v3-1-a3440823a07d@google.com

Changes in v3:
- Fixed doclink to be srctree-based instead of relative.
- Switched to prelude import instead of fine-grained imports.
- Link to v2: https://lore.kernel.org/r/20251216-add-entropy-v2-1-4d866f251474@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/random.rs | 17 +++++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
index f812cf12004286962985a068665443dc22c389a2..c82e6747043e2472d6b5e4d9043fa8bc6d3c8434 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 random;
 pub mod rbtree;
 pub mod regulator;
 pub mod revocable;
diff --git a/rust/kernel/random.rs b/rust/kernel/random.rs
new file mode 100644
index 0000000000000000000000000000000000000000..a9b19698e09665696fef77b4486c4a1a20d0a42e
--- /dev/null
+++ b/rust/kernel/random.rs
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! Randomness.
+//!
+//! C header: [`include/linux/random.h`](srctree/include/linux/random.h)
+
+use crate::prelude::*;
+
+/// Adds the given buffer to the entropy pool, but does not credit any entropy.
+///
+/// This function mixes 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>
Re: [PATCH v4] rust: Add support for feeding entropy to randomness pool
Posted by Jason A. Donenfeld 1 month, 1 week ago
Hi,

Thanks for CCing me Miguel. I find it strange that it was left out on
apparently 4 revisions of it. Yes, this should be added to the
MAINTAINER's normal rng section. I'm happy to maintain this.

However...

On Tue, Dec 30, 2025 at 05:53:57PM +0000, Matthew Maurer wrote:
> Adds just enough support to allow device drivers to feed entropy to the
> central pool.
> [...]
> +/// This function mixes 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).

Small nit: There are two existing comments in the C source (one of which
I know you know about because your text is almost that text). Why not
just use those verbatim? Or improve those and sync that to here? I'm not
a big fan of bifurcation.

> +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()) };
> +}

Bigger question, perhaps for Miguel: what's the convention for adding
these bindings? Is it, (A) "this is a useful API surface, so let's add the
functions so driver writers can use them later" or is it (B) "add useful
APIs as they're needed by driver writers"?

If (A), then why only add one single function from include/linux/random.h?
Shouldn't you add them all?

If (B), then shouldn't this patch be in a series alongside code that
actually calls this one function that is added? Usually the kernel
doesn't add code "just for the sake of it". APIs need in-tree users.

I think case (B) is closer to what I'm used to seeing, but Rust is a
brave new world so maybe (A) is desirable for bootstrapping it. However,
this patch accomplishes neither (A) nor (B).

Jason
Re: [PATCH v4] rust: Add support for feeding entropy to randomness pool
Posted by Miguel Ojeda 1 month, 1 week ago
On Wed, Dec 31, 2025 at 1:48 PM Jason A. Donenfeld <Jason@zx2c4.com> wrote:
>
> Thanks for CCing me Miguel. I find it strange that it was left out on
> apparently 4 revisions of it. Yes, this should be added to the
> MAINTAINER's normal rng section. I'm happy to maintain this.

You're welcome, and thanks for the quick reply!

> Bigger question, perhaps for Miguel: what's the convention for adding
> these bindings? Is it, (A) "this is a useful API surface, so let's add the
> functions so driver writers can use them later" or is it (B) "add useful
> APIs as they're needed by driver writers"?

We follow the usual kernel practice, so (B), though sometimes a user
is known to be incoming, so it gets added in a separate series for
convenience or similar.

But, yeah, in such a case, it should be agreed upon / explained where
it is supposed to be used, and the cover letter here should do that
(and you are completely right to ask!).

Cheers,
Miguel
Re: [PATCH v4] rust: Add support for feeding entropy to randomness pool
Posted by Matthew Maurer 1 month ago
On Wed, Dec 31, 2025 at 7:46 AM Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> On Wed, Dec 31, 2025 at 1:48 PM Jason A. Donenfeld <Jason@zx2c4.com> wrote:
> >
> > Thanks for CCing me Miguel. I find it strange that it was left out on
> > apparently 4 revisions of it. Yes, this should be added to the
> > MAINTAINER's normal rng section. I'm happy to maintain this.

Apologies for that, it's my mistake.

>> Small nit: There are two existing comments in the C source (one of which
>> I know you know about because your text is almost that text). Why not
>> just use those verbatim? Or improve those and sync that to here? I'm not
>> a big fan of bifurcation.

It does not need to be different. I'll use it verbatim in the next revision.

>
> You're welcome, and thanks for the quick reply!
>
> > Bigger question, perhaps for Miguel: what's the convention for adding
> > these bindings? Is it, (A) "this is a useful API surface, so let's add the
> > functions so driver writers can use them later" or is it (B) "add useful
> > APIs as they're needed by driver writers"?
>
> We follow the usual kernel practice, so (B), though sometimes a user
> is known to be incoming, so it gets added in a separate series for
> convenience or similar.
>
> But, yeah, in such a case, it should be agreed upon / explained where
> it is supposed to be used, and the cover letter here should do that
> (and you are completely right to ask!).

I'll add it to the cover letter in the next revision, but for now, the
use case is a re-implementation of the qcom-socinfo driver[1] (still
undergoing significant revision) which uses it to deliver the contents
of the SoC info buffer (which notably includes the device serial
number) to the entropy pool.

[1]: https://lore.kernel.org/all/20251213-qcom-socinfo-v1-1-5daa7f5f2a85@google.com/

>
> Cheers,
> Miguel
Re: [PATCH v4] rust: Add support for feeding entropy to randomness pool
Posted by Miguel Ojeda 1 month, 1 week ago
On Tue, Dec 30, 2025 at 6:54 PM Matthew Maurer <mmaurer@google.com> wrote:
>
>  rust/kernel/random.rs | 17 +++++++++++++++++

We should add this to either "RANDOM NUMBER DRIVER" or add a new
`MAINTAINERS` entry (as a sub-entry of that one, or perhaps of the
Rust one), depending on what the maintainers prefer.

RANDOM NUMBER DRIVER (Ted, Jason) was not Cc'd, so I am doing it here.

Thanks!

Cheers,
Miguel