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, 19 Oct 2020 20:33:55 +0200 From: Peter Zijlstra <peterz@...radead.org> To: kernel test robot <lkp@...el.com> Cc: LKP <lkp@...ts.01.org>, linux-kernel@...r.kernel.org, Ingo Molnar <mingo@...nel.org>, philip.li@...el.com Subject: Re: 4d004099a6 ("lockdep: Fix lockdep recursion"): BUG: using __this_cpu_read() in preemptible [00000000] code: trinity-c6/526 On Tue, Oct 20, 2020 at 12:55:46AM +0800, kernel test robot wrote: > [ 92.898145] BUG: using __this_cpu_read() in preemptible [00000000] code: trinity-c6/526 > [ 92.903305] Call Trace: > [ 92.905182] __this_cpu_preempt_check+0xf/0x11 > [ 92.905968] lockdep_hardirqs_on_prepare+0x2c/0x18f > [ 92.906853] trace_hardirqs_on+0x49/0x53 > [ 92.907578] __bad_area_nosemaphore+0x3a/0x134 Hurph, that's a spurious local_irq_enable(). I suppose this'll fix it. --- diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index 3e99dfef8408..9f818145ef7d 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -4057,9 +4057,6 @@ void lockdep_hardirqs_on_prepare(unsigned long ip) if (unlikely(in_nmi())) return; - if (unlikely(__this_cpu_read(lockdep_recursion))) - return; - if (unlikely(lockdep_hardirqs_enabled())) { /* * Neither irq nor preemption are disabled here @@ -4070,6 +4067,9 @@ void lockdep_hardirqs_on_prepare(unsigned long ip) return; } + if (unlikely(__this_cpu_read(lockdep_recursion))) + return; + /* * We're enabling irqs and according to our state above irqs weren't * already enabled, yet we find the hardware thinks they are in fact @@ -4126,9 +4126,6 @@ void noinstr lockdep_hardirqs_on(unsigned long ip) goto skip_checks; } - if (unlikely(__this_cpu_read(lockdep_recursion))) - return; - if (lockdep_hardirqs_enabled()) { /* * Neither irq nor preemption are disabled here @@ -4139,6 +4136,9 @@ void noinstr lockdep_hardirqs_on(unsigned long ip) return; } + if (unlikely(__this_cpu_read(lockdep_recursion))) + return; + /* * We're enabling irqs and according to our state above irqs weren't * already enabled, yet we find the hardware thinks they are in fact
Powered by blists - more mailing lists