From: "Gowans, James" <jgowans@amazon.com>
To: "rppt@kernel.org" <rppt@kernel.org>
Cc: "linux-mm@kvack.org" <linux-mm@kvack.org>, "Graf (AWS),
Alexander" <graf@amazon.de>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>
Subject: Re: [PATCH] memblocks: Move late alloc warning down to phys alloc
Date: Wed, 19 Jun 2024 07:53:14 +0000 [thread overview]
Message-ID: <b5be15c1b7389afad2b67bf85b26aab4d213ca19.camel@amazon.com> (raw)
In-Reply-To: <ZnFpPCSTAUj90FJF@kernel.org>
On Tue, 2024-06-18 at 14:02 +0300, Mike Rapoport wrote:
> On Fri, Jun 14, 2024 at 03:30:16PM +0200, James Gowans wrote:
> > Subject: [PATCH] memblocks: Move late alloc warning down to phys alloc
>
> Nit: memblock
Ack!
>
> > If a driver/subsystem tries to do an allocation after memblocks have
> > been freed and the memory handed to the buddy allocator, it will not
> > actually be legal to use that allocation - the buddy allocator owns the
> > memory. This is handled by the memblocks function which does allocations
> > and returns virtual addresses by printing a warning and doing a kmalloc
> > instead. However, the physical allocation function does not to do this
> > check - callers of the physical alloc function are unprotected against
> > mis-use.
>
> Did you see such misuse or this is a theoretical issue?
Yeah, I was driving the memblock allocator badly when prototyping
something. Allocating a large contiguous block of memory for an in-
memory filesystem and I was doing the allocation in an initcall, but by
that point it was too late. The memblock allocator happily gave me a
large chunk of memory, but it was already in use by the buddy allocator,
so ended up with memory corruption. Oops! Getting this warning would
have made the problem immediately obvious.
>
> > Improve the error catching here by moving the check into the physical
> > allocation function which is used by the virtual addr allocation
> > function.
> >
> > Signed-off-by: James Gowans <jgowans@amazon.com>
> > Cc: Mike Rapoport <rppt@kernel.org>
> > Cc: Andrew Morton <akpm@linux-foundation.org>
> > Cc: Alex Graf <graf@amazon.de>
> > ---
> > mm/memblock.c | 18 +++++++++++-------
> > 1 file changed, 11 insertions(+), 7 deletions(-)
> >
> > diff --git a/mm/memblock.c b/mm/memblock.c
> > index d09136e040d3..dd4f237dc1fc 100644
> > --- a/mm/memblock.c
> > +++ b/mm/memblock.c
> > @@ -1457,6 +1457,17 @@ phys_addr_t __init memblock_alloc_range_nid(phys_addr_t size,
> > align = SMP_CACHE_BYTES;
> > }
> >
> > + /*
> > + * Detect any accidental use of these APIs after slab is ready, as at
> > + * this moment memblock may be deinitialized already and its
> > + * internal data may be destroyed (after execution of memblock_free_all)
> > + */
> > + if (WARN_ON_ONCE(slab_is_available())) {
> > + void *vaddr = kzalloc_node(size, GFP_NOWAIT, nid);
> > +
> > + return vaddr ? virt_to_phys(vaddr) : 0;
> > + }
>
> I'd move this before alignment check.
Ack, will do in V2.
Anything else or should I make the tweaks and post V2?
JG
next prev parent reply other threads:[~2024-06-19 7:53 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-14 13:30 James Gowans
2024-06-18 11:02 ` Mike Rapoport
2024-06-19 7:53 ` Gowans, James [this message]
2024-06-19 9:24 ` Mike Rapoport
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=b5be15c1b7389afad2b67bf85b26aab4d213ca19.camel@amazon.com \
--to=jgowans@amazon.com \
--cc=akpm@linux-foundation.org \
--cc=graf@amazon.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=rppt@kernel.org \
/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