From: Jakub Kicinski <kuba@kernel.org>
To: Kees Cook <keescook@chromium.org>
Cc: "David S. Miller" <davem@davemloft.net>,
syzbot+fda18eaa8c12534ccb3b@syzkaller.appspotmail.com,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
Pavel Begunkov <asml.silence@gmail.com>,
pepsipu <soopthegoop@gmail.com>, Vlastimil Babka <vbabka@suse.cz>,
kasan-dev <kasan-dev@googlegroups.com>,
Andrii Nakryiko <andrii@kernel.org>,
ast@kernel.org, bpf <bpf@vger.kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Hao Luo <haoluo@google.com>,
Jesper Dangaard Brouer <hawk@kernel.org>,
John Fastabend <john.fastabend@gmail.com>,
jolsa@kernel.org, KP Singh <kpsingh@kernel.org>,
martin.lau@linux.dev, Stanislav Fomichev <sdf@google.com>,
song@kernel.org, Yonghong Song <yhs@fb.com>,
netdev@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>,
Menglong Dong <imagedong@tencent.com>,
David Ahern <dsahern@kernel.org>, Martin KaFai Lau <kafai@fb.com>,
Luiz Augusto von Dentz <luiz.von.dentz@intel.com>,
Richard Gobert <richardbgobert@gmail.com>,
Andrey Konovalov <andreyknvl@gmail.com>,
David Rientjes <rientjes@google.com>,
linux-hardening@vger.kernel.org
Subject: Re: [PATCH] skbuff: Reallocate to ksize() in __build_skb_around()
Date: Tue, 6 Dec 2022 17:55:57 -0800 [thread overview]
Message-ID: <20221206175557.1cbd3baa@kernel.org> (raw)
In-Reply-To: <20221206231659.never.929-kees@kernel.org>
On Tue, 6 Dec 2022 15:17:14 -0800 Kees Cook wrote:
> - unsigned int size = frag_size ? : ksize(data);
> + unsigned int size = frag_size;
> +
> + /* When frag_size == 0, the buffer came from kmalloc, so we
> + * must find its true allocation size (and grow it to match).
> + */
> + if (unlikely(size == 0)) {
> + void *resized;
> +
> + size = ksize(data);
> + /* krealloc() will immediate return "data" when
> + * "ksize(data)" is requested: it is the existing upper
> + * bounds. As a result, GFP_ATOMIC will be ignored.
> + */
> + resized = krealloc(data, size, GFP_ATOMIC);
> + if (WARN_ON(resized != data))
> + data = resized;
> + }
>
Aammgh. build_skb(0) is plain silly, AFAIK. The performance hit of
using kmalloc()'ed heads is large because GRO can't free the metadata.
So we end up carrying per-MTU skbs across to the application and then
freeing them one by one. With pages we just aggregate up to 64k of data
in a single skb.
I can only grep out 3 cases of build_skb(.. 0), could we instead
convert them into a new build_skb_slab(), and handle all the silliness
in such a new helper? That'd be a win both for the memory safety and one
fewer branch for the fast path.
I think it's worth doing, so LMK if you're okay to do this extra work,
otherwise I can help (unless e.g. Eric tells me I'm wrong..).
next prev parent reply other threads:[~2022-12-07 1:56 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-06 23:17 [PATCH] skbuff: Reallocate to ksize() in __build_skb_around() Kees Cook
2022-12-07 1:55 ` Jakub Kicinski [this message]
2022-12-07 3:47 ` Kees Cook
2022-12-07 4:04 ` Jakub Kicinski
2022-12-07 10:30 ` Eric Dumazet
2022-12-07 9:19 ` Vlastimil Babka
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=20221206175557.1cbd3baa@kernel.org \
--to=kuba@kernel.org \
--cc=andreyknvl@gmail.com \
--cc=andrii@kernel.org \
--cc=asml.silence@gmail.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=haoluo@google.com \
--cc=hawk@kernel.org \
--cc=imagedong@tencent.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kafai@fb.com \
--cc=kasan-dev@googlegroups.com \
--cc=keescook@chromium.org \
--cc=kpsingh@kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luiz.von.dentz@intel.com \
--cc=martin.lau@linux.dev \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=richardbgobert@gmail.com \
--cc=rientjes@google.com \
--cc=sdf@google.com \
--cc=song@kernel.org \
--cc=soopthegoop@gmail.com \
--cc=syzbot+fda18eaa8c12534ccb3b@syzkaller.appspotmail.com \
--cc=vbabka@suse.cz \
--cc=yhs@fb.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 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.