All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <keescook@chromium.org>
To: lkp@lists.01.org
Subject: Re: [sched.h] 317419b91e: perf-sanity-tests.Parse_sched_tracepoints_fields.fail
Date: Thu, 14 Oct 2021 09:14:21 -0700	[thread overview]
Message-ID: <202110140910.295E856@keescook> (raw)
In-Reply-To: <CALOAHbAhT1bTAThrmA1zYE5q8shR4dxZf5fqcq_9wVrV+XwVEQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3492 bytes --]

On Thu, Oct 14, 2021 at 10:40:04PM +0800, Yafang Shao wrote:
> On Thu, Oct 14, 2021 at 9:50 PM Mathieu Desnoyers
> <mathieu.desnoyers@efficios.com> wrote:
> >
> > ----- On Oct 14, 2021, at 9:11 AM, Yafang Shao laoar.shao(a)gmail.com wrote:
> >
> > > On Thu, Oct 14, 2021 at 9:09 PM Mathieu Desnoyers
> > > <mathieu.desnoyers@efficios.com> wrote:
> > >>
> > >> ----- On Oct 14, 2021, at 9:05 AM, Yafang Shao laoar.shao(a)gmail.com wrote:
> > >> [...]
> > >> >> If it happens that this ABI break is noticed by more than an in-tree test
> > >> >> program, then
> > >> >> the kernel's ABI rules will require that this trace field size stays unchanged.
> > >> >> This brings
> > >> >> up once more the whole topic of "Tracepoints ABI" which has been discussed
> > >> >> repeatedly in
> > >> >> the past.
> > >> >>
> > >> >
> > >> > I will check if any other in-tree tools depends on TASK_COMM_LEN.
> > >>
> > >> That's a start, but given this is a userspace ABI, out-of-tree userland
> > >> tools which depend of this to be fixed-size are also relevant.
> > >>
> > >
> > > TASK_COMM_LEN isn't defined in include/uapi/ directory, so it seems
> > > that it isn't the uerspace ABI?
> >
> > One case where this 16 bytes size is expected by userspace is prctl(2) PR_GET_NAME
> > and PR_SET_NAME.
> >
> 
> the prctl(2) man page says that:
> : PR_SET_NAME
> :        If the length of the string, including the terminating
> :        null byte, exceeds 16 bytes, the string is silently truncated.
> : PR_GET_NAME
> :         The buffer should allow space for up to 16 bytes
> :          the returned string will be null-terminated.
> 
> As the string returned to user space is null-terminated, extending
> task comm won't break the prctl(2) user code.

If userspace was:

	char comm[16];
	int important_values;

	...

	prctl(PR_GET_NAME, pid, comm);

the kernel will clobber "important_values", so prctl() must enforce the
old size (and terminate it correctly). It's not okay for us to expect
that userspace get recompiled -- old binaries must continue to work
correctly on kernel kernels.

        case PR_GET_NAME:
                get_task_comm(comm, me);
                if (copy_to_user((char __user *)arg2, comm, sizeof(comm)))
                        return -EFAULT;
                break;

This looks like it needs to be explicitly NUL terminated at 16 as well.

I'd say we need a TASK_COMM_LEN_V1 to use in all the old hard-coded
places.

-Kees

> 
> > The other case I am referring to is with ftrace and perf:
> >
> > mount -t tracefs nodev /sys/kernel/tracing
> > cat /sys/kernel/tracing/events/sched/sched_switch/format
> >
> > name: sched_switch
> > ID: 314
> > format:
> > [...]
> >         field:char prev_comm[16];       offset:8;       size:16;        signed:1;
> > [...]
> >         field:char next_comm[16];       offset:40;      size:16;        signed:1;
> >
> > Both of those fields expose a fixed-size of 16 bytes.
> >
> > AFAIK Steven's intent was that by parsing this file, trace viewers could adapt to
> > changes in the event field layout. Unfortunately, there have been cases where
> > trace viewers had a hard expectation on the field layout. Hopefully those have
> > all been fixed a while ago.
> >
> 
> I don't have a clear idea what will happen to trace viewers if we
> extend task comm.
> 
> Steven, do you have any suggestions ?
> 
> -- 
> Thanks
> Yafang

-- 
Kees Cook

WARNING: multiple messages have this Message-ID (diff)
From: Kees Cook <keescook@chromium.org>
To: Yafang Shao <laoar.shao@gmail.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	acme <acme@kernel.org>, rostedt <rostedt@goodmis.org>,
	kernel test robot <oliver.sang@intel.com>,
	0day robot <lkp@intel.com>, Petr Mladek <pmladek@suse.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Alexander Viro <viro@zeniv.linux.org.uk>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	lkp <lkp@lists.01.org>, Andrew Morton <akpm@linux-foundation.org>,
	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>,
	Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
	bristot <bristot@redhat.com>,
	aubrey li <aubrey.li@linux.intel.com>,
	yu c chen <yu.c.chen@intel.com>
Subject: Re: [sched.h] 317419b91e: perf-sanity-tests.Parse_sched_tracepoints_fields.fail
Date: Thu, 14 Oct 2021 09:14:21 -0700	[thread overview]
Message-ID: <202110140910.295E856@keescook> (raw)
In-Reply-To: <CALOAHbAhT1bTAThrmA1zYE5q8shR4dxZf5fqcq_9wVrV+XwVEQ@mail.gmail.com>

On Thu, Oct 14, 2021 at 10:40:04PM +0800, Yafang Shao wrote:
> On Thu, Oct 14, 2021 at 9:50 PM Mathieu Desnoyers
> <mathieu.desnoyers@efficios.com> wrote:
> >
> > ----- On Oct 14, 2021, at 9:11 AM, Yafang Shao laoar.shao@gmail.com wrote:
> >
> > > On Thu, Oct 14, 2021 at 9:09 PM Mathieu Desnoyers
> > > <mathieu.desnoyers@efficios.com> wrote:
> > >>
> > >> ----- On Oct 14, 2021, at 9:05 AM, Yafang Shao laoar.shao@gmail.com wrote:
> > >> [...]
> > >> >> If it happens that this ABI break is noticed by more than an in-tree test
> > >> >> program, then
> > >> >> the kernel's ABI rules will require that this trace field size stays unchanged.
> > >> >> This brings
> > >> >> up once more the whole topic of "Tracepoints ABI" which has been discussed
> > >> >> repeatedly in
> > >> >> the past.
> > >> >>
> > >> >
> > >> > I will check if any other in-tree tools depends on TASK_COMM_LEN.
> > >>
> > >> That's a start, but given this is a userspace ABI, out-of-tree userland
> > >> tools which depend of this to be fixed-size are also relevant.
> > >>
> > >
> > > TASK_COMM_LEN isn't defined in include/uapi/ directory, so it seems
> > > that it isn't the uerspace ABI?
> >
> > One case where this 16 bytes size is expected by userspace is prctl(2) PR_GET_NAME
> > and PR_SET_NAME.
> >
> 
> the prctl(2) man page says that:
> : PR_SET_NAME
> :        If the length of the string, including the terminating
> :        null byte, exceeds 16 bytes, the string is silently truncated.
> : PR_GET_NAME
> :         The buffer should allow space for up to 16 bytes
> :          the returned string will be null-terminated.
> 
> As the string returned to user space is null-terminated, extending
> task comm won't break the prctl(2) user code.

If userspace was:

	char comm[16];
	int important_values;

	...

	prctl(PR_GET_NAME, pid, comm);

the kernel will clobber "important_values", so prctl() must enforce the
old size (and terminate it correctly). It's not okay for us to expect
that userspace get recompiled -- old binaries must continue to work
correctly on kernel kernels.

        case PR_GET_NAME:
                get_task_comm(comm, me);
                if (copy_to_user((char __user *)arg2, comm, sizeof(comm)))
                        return -EFAULT;
                break;

This looks like it needs to be explicitly NUL terminated at 16 as well.

I'd say we need a TASK_COMM_LEN_V1 to use in all the old hard-coded
places.

-Kees

> 
> > The other case I am referring to is with ftrace and perf:
> >
> > mount -t tracefs nodev /sys/kernel/tracing
> > cat /sys/kernel/tracing/events/sched/sched_switch/format
> >
> > name: sched_switch
> > ID: 314
> > format:
> > [...]
> >         field:char prev_comm[16];       offset:8;       size:16;        signed:1;
> > [...]
> >         field:char next_comm[16];       offset:40;      size:16;        signed:1;
> >
> > Both of those fields expose a fixed-size of 16 bytes.
> >
> > AFAIK Steven's intent was that by parsing this file, trace viewers could adapt to
> > changes in the event field layout. Unfortunately, there have been cases where
> > trace viewers had a hard expectation on the field layout. Hopefully those have
> > all been fixed a while ago.
> >
> 
> I don't have a clear idea what will happen to trace viewers if we
> extend task comm.
> 
> Steven, do you have any suggestions ?
> 
> -- 
> Thanks
> Yafang

-- 
Kees Cook

  parent reply	other threads:[~2021-10-14 16:14 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-10 10:24 [PATCH v3 0/4] task_struct: extend task comm from 16 to 24 for CONFIG_BASE_FULL Yafang Shao
2021-10-10 10:24 ` [PATCH v3 1/4] connector: use __get_task_comm in proc_comm_connector Yafang Shao
2021-10-10 10:24 ` [PATCH v3 2/4] fs/exec: use strscpy instead of strlcpy in __set_task_comm Yafang Shao
2021-10-10 10:24 ` [PATCH v3 3/4] sched.h: extend task comm from 16 to 24 for CONFIG_BASE_FULL Yafang Shao
2021-10-10 12:52   ` kernel test robot
2021-10-10 13:05     ` Yafang Shao
2021-10-14  7:27   ` [sched.h] 317419b91e: perf-sanity-tests.Parse_sched_tracepoints_fields.fail kernel test robot
2021-10-14  7:27     ` kernel test robot
2021-10-14  9:24     ` Yafang Shao
2021-10-14  9:24       ` Yafang Shao
2021-10-14 12:42       ` Mathieu Desnoyers
2021-10-14 12:42         ` Mathieu Desnoyers
2021-10-14 13:05         ` Yafang Shao
2021-10-14 13:05           ` Yafang Shao
2021-10-14 13:09           ` Mathieu Desnoyers
2021-10-14 13:09             ` Mathieu Desnoyers
2021-10-14 13:11             ` Yafang Shao
2021-10-14 13:11               ` Yafang Shao
2021-10-14 13:50               ` Mathieu Desnoyers
2021-10-14 13:50                 ` Mathieu Desnoyers
2021-10-14 14:40                 ` Yafang Shao
2021-10-14 14:40                   ` Yafang Shao
2021-10-14 14:48                   ` Steven Rostedt
2021-10-14 14:48                     ` Steven Rostedt
2021-10-14 15:05                     ` Yafang Shao
2021-10-14 15:05                       ` Yafang Shao
2021-10-14 16:14                   ` Kees Cook [this message]
2021-10-14 16:14                     ` Kees Cook
2021-10-15  2:05                     ` Yafang Shao
2021-10-15  2:05                       ` Yafang Shao
2021-10-15  2:14                       ` Steven Rostedt
2021-10-15  2:14                         ` Steven Rostedt
2021-10-15  2:20                         ` Yafang Shao
2021-10-15  2:20                           ` Yafang Shao
2021-10-19 16:51         ` Arnaldo Carvalho de Melo
2021-10-19 16:51           ` Arnaldo Carvalho de Melo
2021-10-20  4:01           ` Yafang Shao
2021-10-20  4:01             ` Yafang Shao
2021-10-10 10:24 ` [PATCH v3 4/4] kernel/kthread: show a warning if kthread's comm is truncated Yafang Shao

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=202110140910.295E856@keescook \
    --to=keescook@chromium.org \
    --cc=lkp@lists.01.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 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.