All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yafang Shao <laoar.shao@gmail.com>
To: Petr Mladek <pmladek@suse.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Kees Cook <keescook@chromium.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Valentin Schneider <valentin.schneider@arm.com>,
	Qiang Zhang <qiang.zhang@windriver.com>,
	robdclark <robdclark@chromium.org>,
	christian <christian@brauner.io>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Ingo Molnar <mingo@redhat.com>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	David Miller <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Andrii Nakryiko <andrii@kernel.org>, Martin Lau <kafai@fb.com>,
	Song Liu <songliubraving@fb.com>, Yonghong Song <yhs@fb.com>,
	john fastabend <john.fastabend@gmail.com>,
	KP Singh <kpsingh@kernel.org>,
	dennis.dalessandro@cornelisnetworks.com,
	mike.marciniszyn@cornelisnetworks.com, dledford@redhat.com,
	jgg@ziepe.ca, linux-rdma@vger.kernel.org,
	netdev <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>,
	"linux-perf-use." <linux-perf-users@vger.kernel.org>,
	linux-fsdevel@vger.kernel.org, Linux MM <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	kernel test robot <oliver.sang@intel.com>,
	kbuild test robot <lkp@intel.com>
Subject: Re: [PATCH v7 00/11] extend task comm from 16 to 24
Date: Mon, 1 Nov 2021 22:34:30 +0800	[thread overview]
Message-ID: <CALOAHbA61RyGVzG8SVcNG=0rdqnUCt4AxCKmtuxRnbS_SH=+MQ@mail.gmail.com> (raw)
In-Reply-To: <YX/0h7j/nDwoBA+J@alley>

On Mon, Nov 1, 2021 at 10:07 PM Petr Mladek <pmladek@suse.com> wrote:
>
> On Mon 2021-11-01 06:04:08, Yafang Shao wrote:
> > There're many truncated kthreads in the kernel, which may make trouble
> > for the user, for example, the user can't get detailed device
> > information from the task comm.
> >
> > This patchset tries to improve this problem fundamentally by extending
> > the task comm size from 16 to 24, which is a very simple way.
> >
> > In order to do that, we have to do some cleanups first.
> >
> > 1. Make the copy of task comm always safe no matter what the task
> >    comm size is. For example,
> >
> >       Unsafe                 Safe
> >       strlcpy                strscpy_pad
> >       strncpy                strscpy_pad
> >       bpf_probe_read_kernel  bpf_probe_read_kernel_str
> >                              bpf_core_read_str
> >                              bpf_get_current_comm
> >                              perf_event__prepare_comm
> >                              prctl(2)
> >
> >    After this step, the comm size change won't make any trouble to the
> >    kernel or the in-tree tools for example perf, BPF programs.
> >
> > 2. Cleanup some old hard-coded 16
> >    Actually we don't need to convert all of them to TASK_COMM_LEN or
> >    TASK_COMM_LEN_16, what we really care about is if the convert can
> >    make the code more reasonable or easier to understand. For
> >    example, some in-tree tools read the comm from sched:sched_switch
> >    tracepoint, as it is derived from the kernel, we'd better make them
> >    consistent with the kernel.
>
> The above changes make sense even if we do not extend comm[] array in
> task_struct.
>
>
> > 3. Extend the task comm size from 16 to 24
> >    task_struct is growing rather regularly by 8 bytes. This size change
> >    should be acceptable. We used to think about extending the size for
> >    CONFIG_BASE_FULL only, but that would be a burden for maintenance
> >    and introduce code complexity.
> >
> > 4. Print a warning if the kthread comm is still truncated.
> >
> > 5. What will happen to the out-of-tree tools after this change?
> >    If the tool get task comm through kernel API, for example prctl(2),
> >    bpf_get_current_comm() and etc, then it doesn't matter how large the
> >    user buffer is, because it will always get a string with a nul
> >    terminator. While if it gets the task comm through direct string copy,
> >    the user tool must make sure the copied string has a nul terminator
> >    itself. As TASK_COMM_LEN is not exposed to userspace, there's no
> >    reason that it must require a fixed-size task comm.
>
> The amount of code that has to be updated is really high. I am pretty
> sure that there are more potential buffer overflows left.
>
> You did not commented on the concerns in the thread
> https://lore.kernel.org/all/CAADnVQKm0Ljj-w5PbkAu1ugLFnZRRPt-Vk-J7AhXxDD5xVompA@mail.gmail.com/
>

I thought Steven[1] and  Kees[2] have already clearly explained why we
do it like that, so I didn't give any more words on it.

[1]. https://lore.kernel.org/all/20211025170503.59830a43@gandalf.local.home/
[2]. https://lore.kernel.org/all/202110251406.56F87A3522@keescook/

> Several people suggested to use a more conservative approach.

Yes, they are Al[3] and Alexei[4].

[3]. https://lore.kernel.org/lkml/YVkmaSUxbg%2FJtBHb@zeniv-ca.linux.org.uk/
[4]. https://lore.kernel.org/all/CAADnVQKm0Ljj-w5PbkAu1ugLFnZRRPt-Vk-J7AhXxDD5xVompA@mail.gmail.com/

> I mean
> to keep comm[16] as is and add a new pointer to the full name. The buffer
> for the long name might be dynamically allocated only when needed.
>

That would add a new allocation in the fork() for the threads with a long name.
I'm not sure if it is worth it.

> The pointer might be either in task_struct or struct kthread. It might
> be used the same way as the full name stored by workqueue kthreads.
>

If we decide to do it like that, I think we'd better add it in
task_struct, then it will work for all tasks.

> The advantage of the separate pointer:
>
>    + would work for names longer than 32
>    + will not open security holes in code
>

Yes, those are the advantages.  And the disadvantage of it is:

 - new allocation in fork()


-- 
Thanks
Yafang

  reply	other threads:[~2021-11-01 14:35 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-01  6:04 [PATCH v7 00/11] extend task comm from 16 to 24 Yafang Shao
2021-11-01  6:04 ` [PATCH v7 01/11] fs/exec: make __set_task_comm always set a nul terminated string Yafang Shao
2021-11-01  6:04 ` [PATCH v7 02/11] fs/exec: make __get_task_comm always get " Yafang Shao
2021-11-01  6:04 ` [PATCH v7 03/11] sched.h: use __must_be_array instead of BUILD_BUG_ON in get_task_comm Yafang Shao
2021-11-01  6:04 ` [PATCH v7 04/11] drivers/infiniband: make setup_ctxt always get a nul terminated task comm Yafang Shao
2021-11-01  6:04 ` [PATCH v7 05/11] fs/binfmt_elf: make prpsinfo " Yafang Shao
2021-11-01  6:04 ` [PATCH v7 06/11] samples/bpf/test_overhead_kprobe_kern: make it adopt to task comm size change Yafang Shao
2021-11-01  6:04 ` [PATCH v7 07/11] tools/bpf/bpftool/skeleton: " Yafang Shao
2021-11-01 23:47   ` Andrii Nakryiko
2021-11-01  6:04 ` [PATCH v7 08/11] tools/perf/test: make perf test " Yafang Shao
2021-11-17 14:31   ` Arnaldo Carvalho de Melo
2021-11-18 14:18     ` Yafang Shao
2021-11-01  6:04 ` [PATCH v7 09/11] tools/testing/selftests/bpf: make it " Yafang Shao
2021-11-01 23:47   ` Andrii Nakryiko
2021-11-01  6:04 ` [PATCH v7 10/11] sched.h: extend task comm from 16 to 24 Yafang Shao
2021-11-01  6:04 ` [PATCH v7 11/11] kernel/kthread: show a warning if kthread's comm is truncated Yafang Shao
2021-11-01 12:44 ` [PATCH v7 00/11] extend task comm from 16 to 24 Matthew Wilcox
2021-11-01 13:12   ` Yafang Shao
2021-11-01 14:07 ` Petr Mladek
2021-11-01 14:34   ` Yafang Shao [this message]
2021-11-01 16:02     ` Petr Mladek
2021-11-01 16:06       ` Steven Rostedt
2021-11-02  1:09       ` Yafang Shao
2021-11-02  1:18         ` Steven Rostedt
2021-11-02  1:26           ` Yafang Shao
2021-11-02  7:56             ` Petr Mladek
2021-11-02 13:48               ` Yafang Shao
2021-11-02  9:26           ` David Hildenbrand
2021-11-04  1:37 ` Michał Mirosław
2021-11-05  6:34   ` Yafang Shao
2021-11-05 23:57     ` Michał Mirosław
2021-11-06  9:12       ` Yafang Shao
2021-11-06 11:29         ` Michał Mirosław

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='CALOAHbA61RyGVzG8SVcNG=0rdqnUCt4AxCKmtuxRnbS_SH=+MQ@mail.gmail.com' \
    --to=laoar.shao@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=andrii@kernel.org \
    --cc=arnaldo.melo@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=christian@brauner.io \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=dennis.dalessandro@cornelisnetworks.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=dledford@redhat.com \
    --cc=jgg@ziepe.ca \
    --cc=john.fastabend@gmail.com \
    --cc=juri.lelli@redhat.com \
    --cc=kafai@fb.com \
    --cc=keescook@chromium.org \
    --cc=kpsingh@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=lkp@intel.com \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mike.marciniszyn@cornelisnetworks.com \
    --cc=mingo@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=oliver.sang@intel.com \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=qiang.zhang@windriver.com \
    --cc=robdclark@chromium.org \
    --cc=rostedt@goodmis.org \
    --cc=songliubraving@fb.com \
    --cc=valentin.schneider@arm.com \
    --cc=vincent.guittot@linaro.org \
    --cc=viro@zeniv.linux.org.uk \
    --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.