Re: [PATCH] rust: bitfield: require Zeroable storage for Zeroable impl

From: Gary Guo

Date: Sun Sep 13 2026 - 15:38:15 EST


On Sun Sep 13, 2026 at 4:34 PM BST, Yilin Chen wrote:
> The bitfield! macro implements Zeroable for generated wrapper
> types. This assumes the storage type accepts an all-zero bit
> pattern. However, the macro accepts any type and does not encode
> that requirement.

How? The bitfield macro will fail for types other than primtive integers.

Best,
Gary

>
> Add a Zeroable bound to the generated implementation. This prevents
> invalid storage types from obtaining an unsound Zeroable implementation.
>
> Fixes: b7b8b4ccdad4 ("rust: extract `bitfield!` macro from `register!`")
> Assisted-by: Codex:GPT-5.6 Sol
> Signed-off-by: Yilin Chen <1479826151@xxxxxx>
> ---
> rust/kernel/bitfield.rs | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/rust/kernel/bitfield.rs b/rust/kernel/bitfield.rs
> index a0d0894..3dd4dea 100644
> --- a/rust/kernel/bitfield.rs
> +++ b/rust/kernel/bitfield.rs
> @@ -330,8 +330,12 @@ macro_rules! bitfield {
> }
> }
>
> - // SAFETY: `$storage` is `Zeroable` and `$name` is transparent.
> - unsafe impl ::pin_init::Zeroable for $name {}
> + // SAFETY:
> + // - `$storage: Zeroable` guarantees that the all-zero bit pattern is valid.
> + // - `$name` is `repr(transparent)` over `$storage`.
> + unsafe impl ::pin_init::Zeroable for $name
> + where $storage: ::pin_init::Zeroable
> + {}
>
> impl ::core::convert::From<$name> for $storage {
> #[inline(always)]