]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commit
printk: drop in_nmi check from printk_safe_flush_on_panic()
authorSergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Wed, 30 May 2018 07:03:50 +0000 (16:03 +0900)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 1 Mar 2019 13:20:31 +0000 (14:20 +0100)
commitda80592c4f85e76b39f332a806be7a4ef613293d
tree32b4ffd1e473d314e52bf624b5bc2034e8a7478a
parent2914be71808c61119214c82ccff228362f81b808
printk: drop in_nmi check from printk_safe_flush_on_panic()

BugLink: http://bugs.launchpad.net/bugs/1815234
[ Upstream commit 554755be08fba31c74f66b82a485e5513205af84 ]

Drop the in_nmi() check from printk_safe_flush_on_panic()
and attempt to re-init (IOW unlock) locked logbuf spinlock
from panic CPU regardless of its context.

Otherwise, theoretically, we can deadlock on logbuf trying to flush
per-CPU buffers:

  a) Panic CPU is running in non-NMI context
  b) Panic CPU sends out shutdown IPI via reboot vector
  c) Panic CPU fails to stop all remote CPUs
  d) Panic CPU sends out shutdown IPI via NMI vector
     One of the CPUs that we bring down via NMI vector can hold
     logbuf spin lock (theoretically).

Link: http://lkml.kernel.org/r/20180530070350.10131-1-sergey.senozhatsky@gmail.com
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
kernel/printk/printk_safe.c