[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Z0I2Q_vGErIQ0xdn@pollux.localdomain>
Date: Sat, 23 Nov 2024 21:08:35 +0100
From: Danilo Krummrich <dakr@...nel.org>
To: Asahi Lina <lina@...hilina.net>
Cc: Miguel Ojeda <ojeda@...nel.org>, Alex Gaynor <alex.gaynor@...il.com>,
Boqun Feng <boqun.feng@...il.com>, Gary Guo <gary@...yguo.net>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>,
Benno Lossin <benno.lossin@...ton.me>,
Andreas Hindborg <a.hindborg@...nel.org>,
Alice Ryhl <aliceryhl@...gle.com>, Trevor Gross <tmgross@...ch.edu>,
Janne Grunau <j@...nau.net>, rust-for-linux@...r.kernel.org,
linux-kernel@...r.kernel.org, asahi@...ts.linux.dev
Subject: Re: [PATCH] rust: alloc: Fix `ArrayLayout` allocations
On Sat, Nov 23, 2024 at 07:29:38PM +0900, Asahi Lina wrote:
> We were accidentally allocating a layout for the *square* of the object
> size due to a variable shadowing mishap.
>
> Fixes memory bloat and page allocation failures in drm/asahi.
>
> Reported-by: Janne Grunau <j@...nau.net>
> Fixes: 9e7bbfa18276 ("rust: alloc: introduce `ArrayLayout`")
> Signed-off-by: Asahi Lina <lina@...hilina.net>
Good catch!
Acked-by: Danilo Krummrich <dakr@...nel.org>
(I'm just back from moving and just starting to catch up on what was going on
in the last few weeks.)
Is this related to the performance regression that has been observed by Andreas?
Or did it turn out to be a false positive?
- Danilo
> ---
> rust/kernel/alloc/layout.rs | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/rust/kernel/alloc/layout.rs b/rust/kernel/alloc/layout.rs
> index 7e0c2f46157b772248450a77ff445091e17fdfd7..4b3cd7fdc816c158e63ac74014cbfc0794547e81 100644
> --- a/rust/kernel/alloc/layout.rs
> +++ b/rust/kernel/alloc/layout.rs
> @@ -45,7 +45,7 @@ pub const fn empty() -> Self {
> /// When `len * size_of::<T>()` overflows or when `len * size_of::<T>() > isize::MAX`.
> pub const fn new(len: usize) -> Result<Self, LayoutError> {
> match len.checked_mul(core::mem::size_of::<T>()) {
> - Some(len) if len <= ISIZE_MAX => {
> + Some(size) if size <= ISIZE_MAX => {
> // INVARIANT: We checked above that `len * size_of::<T>() <= isize::MAX`.
> Ok(Self {
> len,
>
> ---
> base-commit: b2603f8ac8217bc59f5c7f248ac248423b9b99cb
> change-id: 20241123-rust-fix-arraylayout-0b1009d89fb7
>
> Cheers,
> ~~ Lina
>
Powered by blists - more mailing lists