From: Kees Cook <keescook@chromium.org>
To: Bixuan Cui <cuibixuan@linux.alibaba.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
torvalds@linux-foundation.org, leon@kernel.org,
akpm@linux-foundation.org, w@1wt.eu
Subject: Re: [PATCH -next] mm: delete oversized WARN_ON() in kvmalloc() calls
Date: Wed, 1 Dec 2021 19:46:01 -0800 [thread overview]
Message-ID: <202112011944.28EF2FC44@keescook> (raw)
In-Reply-To: <1638410784-48646-1-git-send-email-cuibixuan@linux.alibaba.com>
On Thu, Dec 02, 2021 at 10:06:24AM +0800, Bixuan Cui wrote:
> Delete the WARN_ON() and return NULL directly for oversized parameter
> in kvmalloc() calls.
> Also add unlikely().
>
> Fixes: 7661809d493b ("mm: don't allow oversized kvmalloc() calls")
> Signed-off-by: Bixuan Cui <cuibixuan@linux.alibaba.com>
> ---
> There are a lot of oversize warnings and patches about kvmalloc() calls
> recently. Maybe these warnings are not very necessary.
It seems these warnings are working, yes? i.e. we're finding the places
where giant values are coming in?
>
> https://lore.kernel.org/all/YadOjJXMTjP85MQx@unreal
>
> The example of size check in __do_kmalloc_node():
> __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller)
> {
> struct kmem_cache *cachep;
> void *ret;
>
> if (unlikely(size > KMALLOC_MAX_CACHE_SIZE))
> return NULL;
> cachep = kmalloc_slab(size, flags);
>
> mm/util.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/util.c b/mm/util.c
> index 7e433690..d26f19c 100644
> --- a/mm/util.c
> +++ b/mm/util.c
> @@ -587,7 +587,7 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node)
> return ret;
>
> /* Don't even allow crazy sizes */
> - if (WARN_ON_ONCE(size > INT_MAX))
> + if (unlikely(size > INT_MAX))
> return NULL;
If we're rejecting the value, then it's still a pathological size, so
shouldn't the check be happening in the caller? I think the WARN is
doing exactly what it was supposed to do: find the places where bad
sizes can reach vmalloc.
-Kees
>
> return __vmalloc_node(size, 1, flags, node,
> --
> 1.8.3.1
>
--
Kees Cook
next prev parent reply other threads:[~2021-12-02 3:46 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
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 [this message]
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=202112011944.28EF2FC44@keescook \
--to=keescook@chromium.org \
--cc=akpm@linux-foundation.org \
--cc=cuibixuan@linux.alibaba.com \
--cc=leon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=torvalds@linux-foundation.org \
--cc=w@1wt.eu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.