lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aAcesqWolkxw4V8D@Mac.home>
Date: Mon, 21 Apr 2025 21:44:34 -0700
From: Boqun Feng <boqun.feng@...il.com>
To: Benno Lossin <benno.lossin@...ton.me>
Cc: Miguel Ojeda <ojeda@...nel.org>, Alex Gaynor <alex.gaynor@...il.com>,
	Gary Guo <gary@...yguo.net>,
	Björn Roy Baron <bjorn3_gh@...tonmail.com>,
	Andreas Hindborg <a.hindborg@...nel.org>,
	Alice Ryhl <aliceryhl@...gle.com>, Trevor Gross <tmgross@...ch.edu>,
	Danilo Krummrich <dakr@...nel.org>, Fiona Behrens <me@...enk.dev>,
	Christian Schrefl <chrisi.schrefl@...il.com>,
	rust-for-linux@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 2/8] rust: pin-init: Add the `Wrapper` trait.

On Mon, Apr 21, 2025 at 10:17:59PM +0000, Benno Lossin wrote:
> From: Christian Schrefl <chrisi.schrefl@...il.com>
> 
> This trait allows creating `PinInitializers` for wrapper or new-type
> structs with the inner value structurally pinned, when given the
> initializer for the inner value.
> 
> Implement this trait for `UnsafeCell` and `MaybeUninit`.
> 
> Signed-off-by: Christian Schrefl <chrisi.schrefl@...il.com>
> Link: https://github.com/Rust-for-Linux/pin-init/pull/37/commits/3ab4db083bd7b41a1bc23d937224f975d7400e50
> [ Reworded commit message into imperative mode, fixed typo and fixed
>   commit authorship. - Benno ]
> Signed-off-by: Benno Lossin <benno.lossin@...ton.me>
> ---
>  rust/pin-init/src/lib.rs | 44 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 44 insertions(+)
> 
> diff --git a/rust/pin-init/src/lib.rs b/rust/pin-init/src/lib.rs
> index a880c21d3f09..467ccc8bd616 100644
> --- a/rust/pin-init/src/lib.rs
> +++ b/rust/pin-init/src/lib.rs
> @@ -1513,3 +1513,47 @@ unsafe impl<$first: Zeroable, $($t: Zeroable),*> Zeroable for ($first, $($t),*)
>  }
>  
>  impl_tuple_zeroable!(A, B, C, D, E, F, G, H, I, J);
> +
> +/// This trait allows creating an instance of `Self` which contains exactly one
> +/// [structurally pinned value](https://doc.rust-lang.org/std/pin/index.html#projections-and-structural-pinning).
> +///
> +/// This is useful when using wrapper `struct`s like [`UnsafeCell`] or with new-type `struct`s.
> +///
> +/// # Examples
> +///
> +/// ```
> +/// # use core::cell::UnsafeCell;
> +/// # use pin_init::{pin_data, pin_init, Wrapper};
> +///
> +/// #[pin_data]
> +/// struct Foo {}
> +///
> +/// #[pin_data]
> +/// struct Bar {
> +///     #[pin]
> +///     content: UnsafeCell<Foo>
> +/// };
> +///
> +/// let foo_initializer = pin_init!(Foo{});
> +/// let initializer = pin_init!(Bar {
> +///     content <- UnsafeCell::pin_init(foo_initializer)
> +/// });
> +/// ```
> +pub trait Wrapper<T> {
> +    /// Create an pin-initializer for a [`Self`] containing `T` form the `value_init` initializer.

s/Create/Creates ?

and 

s/form/from ?

Regards,
Boqun

> +    fn pin_init<E>(value_init: impl PinInit<T, E>) -> impl PinInit<Self, E>;
> +}
> +
> +impl<T> Wrapper<T> for UnsafeCell<T> {
> +    fn pin_init<E>(value_init: impl PinInit<T, E>) -> impl PinInit<Self, E> {
> +        // SAFETY: `UnsafeCell<T>` has a compatible layout to `T`.
> +        unsafe { cast_pin_init(value_init) }
> +    }
> +}
> +
> +impl<T> Wrapper<T> for MaybeUninit<T> {
> +    fn pin_init<E>(value_init: impl PinInit<T, E>) -> impl PinInit<Self, E> {
> +        // SAFETY: `MaybeUninit<T>` has a compatible layout to `T`.
> +        unsafe { cast_pin_init(value_init) }
> +    }
> +}
> -- 
> 2.48.1
> 
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ