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: <DCW41J94TGVG.1OBWEMPAP3EBK@kernel.org>
Date: Thu, 18 Sep 2025 19:42:54 +0200
From: "Danilo Krummrich" <dakr@...nel.org>
To: "Alice Ryhl" <aliceryhl@...gle.com>
Cc: "Greg Kroah-Hartman" <gregkh@...uxfoundation.org>,
 Arve Hjønnevåg <arve@...roid.com>, "Todd Kjos"
 <tkjos@...roid.com>, "Martijn Coenen" <maco@...roid.com>, "Joel Fernandes"
 <joelagnelf@...dia.com>, "Christian Brauner" <brauner@...nel.org>, "Carlos
 Llamas" <cmllamas@...gle.com>, "Suren Baghdasaryan" <surenb@...gle.com>,
 "Miguel Ojeda" <ojeda@...nel.org>, "Boqun Feng" <boqun.feng@...il.com>,
 "Gary Guo" <gary@...yguo.net>, Björn Roy Baron
 <bjorn3_gh@...tonmail.com>, "Benno Lossin" <lossin@...nel.org>, "Andreas
 Hindborg" <a.hindborg@...nel.org>, "Trevor Gross" <tmgross@...ch.edu>,
 "Lorenzo Stoakes" <lorenzo.stoakes@...cle.com>, "Liam R. Howlett"
 <Liam.Howlett@...cle.com>, "Paul Moore" <paul@...l-moore.com>, "Serge
 Hallyn" <sergeh@...nel.org>, <linux-kernel@...r.kernel.org>,
 <rust-for-linux@...r.kernel.org>, "Wedson Almeida Filho"
 <wedsonaf@...il.com>, "Matt Gilbride" <mattgilbride@...gle.com>
Subject: Re: [PATCH] rust_binder: add Rust Binder driver

(Far from a full review, but two minor drive-by comments.)

On Thu Sep 18, 2025 at 12:19 PM CEST, Alice Ryhl wrote:
> +    /// Register a vma with this page range. Returns the size of the region.
> +    pub(crate) fn register_with_vma(&self, vma: &virt::VmaNew) -> Result<usize> {
> +        let num_bytes = usize::min(vma.end() - vma.start(), bindings::SZ_4M as usize);
> +        let num_pages = num_bytes >> PAGE_SHIFT;
> +
> +        if !ptr::eq::<Mm>(&*self.mm, &**vma.mm()) {
> +            pr_debug!("Failed to register with vma: invalid vma->vm_mm");
> +            return Err(EINVAL);
> +        }
> +        if num_pages == 0 {
> +            pr_debug!("Failed to register with vma: size zero");
> +            return Err(EINVAL);
> +        }
> +
> +        let layout = Layout::array::<PageInfo>(num_pages).map_err(|_| ENOMEM)?;
> +        let pages = KVmalloc::alloc(layout, GFP_KERNEL)?.cast::<PageInfo>();
> +
> +        // SAFETY: This just initializes the pages array.
> +        unsafe {
> +            let self_ptr = self as *const ShrinkablePageRange;
> +            for i in 0..num_pages {
> +                let info = pages.as_ptr().add(i);
> +                ptr::addr_of_mut!((*info).range).write(self_ptr);
> +                ptr::addr_of_mut!((*info).page).write(None);
> +                let lru = ptr::addr_of_mut!((*info).lru);
> +                ptr::addr_of_mut!((*lru).next).write(lru);
> +                ptr::addr_of_mut!((*lru).prev).write(lru);

I think we should prefer &raw in new code.

> +            }
> +        }
> +
> +        let mut inner = self.lock.lock();
> +        if inner.size > 0 {
> +            pr_debug!("Failed to register with vma: already registered");
> +            drop(inner);
> +            // SAFETY: The `pages` array was allocated with the same layout.
> +            unsafe { KVmalloc::free(pages.cast(), layout) };

NIT: If you use KVBox instead, even though you convert to a raw pointer later,
you can probably safe one unsafe.

> +            return Err(EBUSY);
> +        }
> +
> +        inner.pages = pages.as_ptr();
> +        inner.size = num_pages;
> +        inner.vma_addr = vma.start();
> +
> +        Ok(num_pages)
> +    }

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ