From: Matthew Wilcox <willy@infradead.org>
To: Boqun Feng <boqun.feng@gmail.com>
Cc: "Abdiel Janulgue" <abdiel.janulgue@gmail.com>,
"Alice Ryhl" <aliceryhl@google.com>,
rust-for-linux@vger.kernel.org, "Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Wedson Almeida Filho" <wedsonaf@gmail.com>,
"Valentin Obst" <kernel@valentinobst.de>,
"open list" <linux-kernel@vger.kernel.org>,
"Andrew Morton" <akpm@linux-foundation.org>,
"open list:MEMORY MANAGEMENT" <linux-mm@kvack.org>,
airlied@redhat.com, "Kairui Song" <ryncsn@gmail.com>
Subject: Re: [PATCH v3 0/2] rust: page: Add support for existing struct page mappings
Date: Thu, 21 Nov 2024 22:01:23 +0000 [thread overview]
Message-ID: <Zz-ts0s3jHsNP73f@casper.infradead.org> (raw)
In-Reply-To: <Zz-GHlkhrz35w2YN@tardis.local>
On Thu, Nov 21, 2024 at 11:12:30AM -0800, Boqun Feng wrote:
> On Thu, Nov 21, 2024 at 11:30:13AM +0200, Abdiel Janulgue wrote:
> > Hi Boqun, Matthew:
> >
> > On 21/11/2024 02:24, Boqun Feng wrote:
> > > > > So if I understand correctly, what Abdiel needs here is a way to convert
> > > > > a virtual address to the corresponding page, would it make sense to just
> > > > > use folio in this case? Abdiel, what's the operation you are going to
> > > > > call on the page you get?
> > > >
> > > > Yes that's basically it. The goal here is represent those existing struct
> > > > page within this rust Page abstraction but at the same time to avoid taking
> > > > over its ownership.
> > > >
> > > > Boqun, Alice, should we reconsider Ownable and Owned trait again? :)
> > > >
> > >
> > > Could you use folio in your case? If so, we can provide a simple binding
> > > for folio which should be `AlwaysRefcounted`, and re-investigate how
> > > page should be wrapped.
> > >
> >
> > I'm not sure. Is there a way to get the struct folio from a vmalloc'd
> > address, e.g vmalloc_to_folio()?
> >
>
> I think you can use page_folio(vmalloc_to_page(..)) to get the folio,
> but one thing to notice is that folio is guaranteed to be a non-tail
> page, so if you want to do something later for the particular page (if
> it's a tail page), you will need to know the offset of the that page in
> folio. You can do something like below:
This is one of those things which will work today, but will stop
working in the future, and anyway will only appear to work for some
users.
For example, both vmalloc and slab allocations do not use the refcount
on the struct page for anything. eg this will be a UAF (please excuse
me writing in C):
char *a = kmalloc(256, GFP_KERNEL);
struct page *page = get_page(virt_to_page(a));
char *b = page_address(page) + offset_in_page(a);
// a and b will now have the same bit pattern
kfree(a);
*b = 1;
Once you've called kfree(), slab is entitled to hand that memory out
to any other user of kmalloc(). This might actually work to protect
vmalloc() memory from going away under you, but I intend to change
vmalloc so that it won't work (nothing to do with this patch series,
rather an approach to make vmalloc more efficient).
One reason you're confused today is that we have a temporary ambiguity
around what "folio" actually means. The original definition (ie mine) was
simply that it was a non-tail page. We're moving towards the definition
Johannes wanted, which is that it's only the memdesc for anonymous &
file-backed memory [1]. So while vmalloc_to_folio() makes sense under
the original definition, it's an absurdity under the new definition.
So, Abdiel, why are you trying to add this? What are you actually
trying to accomplish in terms of "I am writing a device driver for XXX
and I need to ..."? You've been very evasive up to now.
[1] Actually Johannes wants to split them apart even further so that
anon & file memory have different types, and we may yet get there.
One step at a time.
next prev parent reply other threads:[~2024-11-21 22:01 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-19 11:24 Abdiel Janulgue
2024-11-19 11:24 ` [PATCH v3 1/2] rust: page: use the page's reference count to decide when to free the allocation Abdiel Janulgue
2024-11-19 11:45 ` Alice Ryhl
2024-11-19 12:06 ` Abdiel Janulgue
2024-11-19 12:11 ` Alice Ryhl
2024-11-19 11:24 ` [PATCH v3 2/2] rust: page: Extend support to existing struct page mappings Abdiel Janulgue
2024-11-19 17:07 ` Jann Horn
2024-11-20 22:56 ` Abdiel Janulgue
2024-11-21 20:17 ` Jann Horn
2024-11-22 7:55 ` Alice Ryhl
2024-11-22 8:36 ` Abdiel Janulgue
2024-11-22 8:50 ` Alice Ryhl
2024-11-22 8:09 ` Abdiel Janulgue
2024-11-20 4:57 ` [PATCH v3 0/2] rust: page: Add support for " Matthew Wilcox
2024-11-20 9:10 ` Alice Ryhl
2024-11-20 16:20 ` Boqun Feng
2024-11-20 17:02 ` Matthew Wilcox
2024-11-20 17:25 ` Boqun Feng
2024-11-20 22:56 ` Abdiel Janulgue
2024-11-21 0:24 ` Boqun Feng
2024-11-21 9:19 ` Alice Ryhl
2024-11-21 9:30 ` Abdiel Janulgue
2024-11-21 19:10 ` Boqun Feng
2024-11-21 19:12 ` Boqun Feng
2024-11-21 22:01 ` Matthew Wilcox [this message]
2024-11-21 23:18 ` Abdiel Janulgue
2024-11-22 1:24 ` Matthew Wilcox
2024-11-22 6:58 ` David Airlie
2024-11-22 12:37 ` Paolo Bonzini
2024-11-26 20:31 ` Jann Horn
2024-11-26 20:43 ` Jann Horn
2024-12-02 12:03 ` Asahi Lina
2024-12-03 9:08 ` Alice Ryhl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zz-ts0s3jHsNP73f@casper.infradead.org \
--to=willy@infradead.org \
--cc=a.hindborg@kernel.org \
--cc=abdiel.janulgue@gmail.com \
--cc=airlied@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=kernel@valentinobst.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=ryncsn@gmail.com \
--cc=tmgross@umich.edu \
--cc=wedsonaf@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox