From: Valentin Schneider <valentin.schneider@arm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: syzbot <syzbot+9362b31a2e0cad8b749d@syzkaller.appspotmail.com>,
bp@alien8.de, dwmw@amazon.co.uk, hpa@zytor.com,
linux-kernel@vger.kernel.org, luto@kernel.org, mingo@redhat.com,
syzkaller-bugs@googlegroups.com, tglx@linutronix.de,
x86@kernel.org
Subject: Re: [syzbot] WARNING in kthread_is_per_cpu
Date: Tue, 20 Apr 2021 10:43:43 +0100 [thread overview]
Message-ID: <87lf9duw8g.mognet@arm.com> (raw)
In-Reply-To: <YH6WJc825C4P0FCK@hirez.programming.kicks-ass.net>
On 20/04/21 10:51, Peter Zijlstra wrote:
> On Mon, Apr 19, 2021 at 08:58:26PM +0100, Valentin Schneider wrote:
>
>> Looks about right, IIUC the key being:
>>
>> p->flags & PF_KTHREAD + p->set_child_tid => the struct kthread is
>> persistent
>>
>> p->flags & PF_KTHREAD => you may or may not have a struct kthread (see
>> kernel/umh.c kernel_thread() uses). PF_KTHREAD isn't even guaranteed to
>> persist (begin_new_exec()), which seems to be what the syzbot hit.
>
> Ack, that's nicely put.
>
>> While we're at it, does free_kthread_struct() want the __to_kthread()
>> treatment as well? The other to_kthread() callsites looked like they only
>> made sense with a "proper" kthread anyway.
>
> I think free_kthread_struct() is ok, because a task at that point in its
> lifetime cannot be also doing exec().
>
What if it's one of those kthreads created by directly invoking
kernel_thread()? AFAICT right now it's only umh, and that one does execve()
so it ends up stripped of PF_KTHREAD. It could however go through an error
path, i.e. not call exec, and exit, giving us:
put_task_struct(p)
`\
free_task(p)
`\
if (tsk->flags & PF_KTHREAD)
free_kthread_struct(tsk);
`\
to_kthread(p)
> kthread_func() is another 'fun' trainwreck waiting to happen -- luckily
> the only caller uses current, still let me go fix it.
>
> kthread_probe_data() relies on PF_WQ_WORKER implying PF_KTHREAD but
> otherwise seems very fragile too.
>
> Something like so then?
>
Other than the above:
Reviewed-by: Valentin Schneider <Valentin.Schneider@arm.com>
next prev parent reply other threads:[~2021-04-20 9:43 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-19 10:36 [syzbot] WARNING in kthread_is_per_cpu syzbot
2021-04-19 11:30 ` Thomas Gleixner
2021-04-19 11:31 ` Valentin Schneider
2021-04-19 18:45 ` Peter Zijlstra
2021-04-19 19:58 ` Valentin Schneider
2021-04-20 8:51 ` Peter Zijlstra
2021-04-20 9:43 ` Valentin Schneider [this message]
2021-04-20 10:11 ` Peter Zijlstra
2021-04-20 10:17 ` Valentin Schneider
2021-04-22 7:36 ` [tip: sched/core] kthread: Fix PF_KTHREAD vs to_kthread() race tip-bot2 for Peter Zijlstra
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=87lf9duw8g.mognet@arm.com \
--to=valentin.schneider@arm.com \
--cc=bp@alien8.de \
--cc=dwmw@amazon.co.uk \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=syzbot+9362b31a2e0cad8b749d@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
--cc=tglx@linutronix.de \
--cc=x86@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.