All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Christian Brauner <christian.brauner@ubuntu.com>
Cc: syzbot <syzbot+492a4acccd8fc75ddfd0@syzkaller.appspotmail.com>,
	akpm@linux-foundation.org, arnd@arndb.de, christian@brauner.io,
	deepa.kernel@gmail.com, ebiederm@xmission.com, elver@google.com,
	guro@fb.com, linux-kernel@vger.kernel.org,
	syzkaller-bugs@googlegroups.com, will@kernel.org
Subject: Re: KCSAN: data-race in exit_signals / prepare_signal
Date: Mon, 21 Oct 2019 14:00:30 +0200	[thread overview]
Message-ID: <20191021120029.GA24935@redhat.com> (raw)
In-Reply-To: <20191021111920.frmc3njkha4c3a72@wittgenstein>

On 10/21, Christian Brauner wrote:
>
> This traces back to Oleg fixing a race between a group stop and a thread
> exiting before it notices that it has a pending signal or is in the middle of
> do_exit() already, causing group stop to get wacky.
> The original commit to fix this race is
> commit d12619b5ff56 ("fix group stop with exit race") which took sighand
> lock before setting PF_EXITING on the thread.

Not really... sig_task_ignored() didn't check task->flags until the recent
33da8e7c81 ("signal: Allow cifs and drbd to receive their terminating signals").
But I think this doesn't matter, see below.

> If the race really matters and given how tsk->flags is currently accessed
> everywhere the simple fix for now might be:
>
> diff --git a/kernel/signal.c b/kernel/signal.c
> index c4da1ef56fdf..cf61e044c4cc 100644
> --- a/kernel/signal.c
> +++ b/kernel/signal.c
> @@ -2819,7 +2819,9 @@ void exit_signals(struct task_struct *tsk)
>         cgroup_threadgroup_change_begin(tsk);
>
>         if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) {
> +               spin_lock_irq(&tsk->sighand->siglock);
>                 tsk->flags |= PF_EXITING;
> +               spin_unlock_irq(&tsk->sighand->siglock);

Well, exit_signals() tries to avoid ->siglock in this case....

But this doesn't matter. IIUC the problem is not that exit_signals() sets
PF_EXITING, the problem is that it writes to tsk->flags and kasan detects
the data race.

For example, freezable_schedule() which sets PF_FREEZER_SKIP can equally
"race" with sig_task_ignored() or with ANY other code which checks this
task's flags.

I think this is WONTFIX.

Oleg.


  reply	other threads:[~2019-10-21 12:00 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-21 10:34 KCSAN: data-race in exit_signals / prepare_signal syzbot
2019-10-21 11:19 ` Christian Brauner
2019-10-21 12:00   ` Oleg Nesterov [this message]
2019-10-21 12:15     ` Marco Elver
2019-10-21 13:47       ` Oleg Nesterov
2019-10-21 12:51     ` Christian Brauner
2019-10-21 14:21 ` cgroup_enable_task_cg_lists && PF_EXITING (Was: KCSAN: data-race in exit_signals / prepare_signal) Oleg Nesterov
2019-10-24 17:54   ` Tejun Heo
2019-10-24 19:03   ` [PATCH cgroup/for-5.5] cgroup: remove cgroup_enable_task_cg_lists() optimization Tejun Heo
2019-10-25 12:56     ` Tejun Heo
2019-10-25 13:33       ` Christian Brauner
2019-10-25 14:13         ` Oleg Nesterov
2019-10-25 14:32           ` Christian Brauner
2019-10-25 15:52             ` Oleg Nesterov
2019-10-25 17:05               ` Christian Brauner
2019-10-28 16:48                 ` Oleg Nesterov
2019-10-28 17:30                   ` Christian Brauner
2019-10-28 17:46                     ` Marco Elver

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=20191021120029.GA24935@redhat.com \
    --to=oleg@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=christian.brauner@ubuntu.com \
    --cc=christian@brauner.io \
    --cc=deepa.kernel@gmail.com \
    --cc=ebiederm@xmission.com \
    --cc=elver@google.com \
    --cc=guro@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=syzbot+492a4acccd8fc75ddfd0@syzkaller.appspotmail.com \
    --cc=syzkaller-bugs@googlegroups.com \
    --cc=will@kernel.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.