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.
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 <redacted>
---
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)]--
2.25.1