linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: Matthew Wilcox <willy@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Bixuan Cui <cuibixuan@linux.alibaba.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	torvalds@linux-foundation.org, w@1wt.eu, keescook@chromium.org
Subject: Re: [PATCH -next] mm: delete oversized WARN_ON() in kvmalloc() calls
Date: Thu, 2 Dec 2021 18:08:40 +0200	[thread overview]
Message-ID: <YajviIws7csNbTxU@unreal> (raw)
In-Reply-To: <YajmawzehKqR+j0v@casper.infradead.org>

On Thu, Dec 02, 2021 at 03:29:47PM +0000, Matthew Wilcox wrote:
> On Thu, Dec 02, 2021 at 05:23:42PM +0200, Leon Romanovsky wrote:
> > The problem is that this WARN_ON() is triggered by the users.
> 
> ... or the problem is that you don't do a sanity check between the user
> and the MM system.  I mean, that's what this conversation is about --
> is it a bug to be asking for this much memory in the first place?

We do a lot of checks, and in this case, user provided valid input.
He asked size that doesn't cross his address space.
https://elixir.bootlin.com/linux/v5.16-rc3/source/drivers/infiniband/core/umem_odp.c#L67

		start = ALIGN_DOWN(umem_odp->umem.address, page_size);
		if (check_add_overflow(umem_odp->umem.address,
				       (unsigned long)umem_odp->umem.length,
				       &end))
			return -EOVERFLOW;

There is a feature called ODP (on-demand-paging) which is supported
in some RDMA NICs. It allows to the user "export" their whole address
space to the other RDMA node without pinning the pages. And once the
other node sends data to not-pinned page, the RDMA NIC will prefetch
it.

> 
> > At least in the RDMA world, users can provide huge sizes and they expect
> > to get plain -ENOMEM and not dump stack, because it happens indirectly
> > to them.
> > 
> > In our case, these two kvcalloc() generates WARN_ON().
> > 
> > 		umem_odp->pfn_list = kvcalloc(
> > 			npfns, sizeof(*umem_odp->pfn_list), GFP_KERNEL);
> 
> Does it really make sense for the user to specify 2^31 PFNs in a single
> call?  I mean, that's 8TB of memory.  Should RDMA put its own limit
> in here, or should it rely on kvmalloc returning -ENOMEM?

I heard about such systems with so many available RAM. I don't know
about their usage pattern, most likely they will use hugepages, but
it is my guess.

The thing is that it is not RDMA-specific. You are asking to place same
if (size > KVMALLOC...) check in all subsystems.

Thanks


  reply	other threads:[~2021-12-02 16:09 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-02  2:06 [PATCH -next] mm: delete oversized WARN_ON() in kvmalloc() calls Bixuan Cui
2021-12-02  2:53 ` Tang Yizhou
2021-12-02  3:26 ` Andrew Morton
2021-12-02  4:05   ` Bixuan Cui
2021-12-02  4:29     ` Andrew Morton
2021-12-02 10:38       ` Jeremy Sowden
2021-12-02 15:34         ` Alexei Starovoitov
2021-12-02 21:16           ` Jeremy Sowden
2021-12-02 11:49       ` Bixuan Cui
2021-12-03 19:37       ` Sean Christopherson
2021-12-02 15:23   ` Leon Romanovsky
2021-12-02 15:29     ` Matthew Wilcox
2021-12-02 16:08       ` Leon Romanovsky [this message]
2021-12-02 19:08         ` Kees Cook
2021-12-02 19:24           ` Leon Romanovsky
2021-12-02 21:23             ` Kees Cook
2021-12-02 22:03               ` Andrew Morton
2021-12-03  4:39                 ` Matthew Wilcox
2021-12-02 17:00       ` Jason Gunthorpe
2021-12-02  3:46 ` Kees Cook
2021-12-02  4:44   ` Bixuan Cui
2021-12-02 17:03   ` Jason Gunthorpe
2021-12-05 11:59 ` Leon Romanovsky

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=YajviIws7csNbTxU@unreal \
    --to=leon@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=cuibixuan@linux.alibaba.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=torvalds@linux-foundation.org \
    --cc=w@1wt.eu \
    --cc=willy@infradead.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;
as well as URLs for NNTP newsgroup(s).