lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 15 May 2017 11:10:08 -0400 From: Steven Rostedt <rostedt@...dmis.org> To: Thomas Gleixner <tglx@...utronix.de> Cc: LKML <linux-kernel@...r.kernel.org>, Peter Zijlstra <peterz@...radead.org>, Ingo Molnar <mingo@...nel.org>, Mark Rutland <mark.rutland@....com> Subject: Re: [patch 17/18] sched: Enable might_sleep() checks early On Sun, 14 May 2017 20:27:33 +0200 Thomas Gleixner <tglx@...utronix.de> wrote: > might_sleep() checks are enabled after the boot process is done. That hides > bugs in the smp bringup and driver initialization code. > > Enable it right when the scheduler starts working, i.e. when init task and > kthreadd have been created and right before the idle task enables > preemption. Looking at commit b433c3d4549ae749, it appears that on very slow machines, there is a possibility that the init task can start running. Should system_state be updated before that complete() is called? -- Steve > > Signed-off-by: Thomas Gleixner <tglx@...utronix.de> > --- > init/main.c | 2 ++ > kernel/sched/core.c | 4 +++- > 2 files changed, 5 insertions(+), 1 deletion(-) > > --- a/init/main.c > +++ b/init/main.c > @@ -410,6 +410,8 @@ static noinline void __ref rest_init(voi > * at least once to get things moving: > */ > init_idle_bootup_task(current); > + /* Enable might_sleep() checks */ > + system_state = SYSTEM_BOOTING_UP; > schedule_preempt_disabled(); > /* Call into cpu_idle with preempt disabled */ > cpu_startup_entry(CPUHP_ONLINE); > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -6226,8 +6226,10 @@ void ___might_sleep(const char *file, in > > if ((preempt_count_equals(preempt_offset) && !irqs_disabled() && > !is_idle_task(current)) || > - system_state != SYSTEM_RUNNING || oops_in_progress) > + system_state == SYSTEM_BOOTING || system_state > SYSTEM_RUNNING || > + oops_in_progress) > return; > + > if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy) > return; > prev_jiffy = jiffies; >
Powered by blists - more mailing lists