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: Wed, 29 Mar 2017 18:25:08 +0900 From: Sergey Senozhatsky <sergey.senozhatsky@...il.com> To: Steven Rostedt <rostedt@...dmis.org>, Petr Mladek <pmladek@...e.com> Cc: Jan Kara <jack@...e.cz>, Andrew Morton <akpm@...ux-foundation.org>, Linus Torvalds <torvalds@...ux-foundation.org>, Peter Zijlstra <peterz@...radead.org>, "Rafael J . Wysocki" <rjw@...ysocki.net>, Eric Biederman <ebiederm@...ssion.com>, Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Jiri Slaby <jslaby@...e.com>, Pavel Machek <pavel@....cz>, Len Brown <len.brown@...el.com>, linux-kernel@...r.kernel.org, Sergey Senozhatsky <sergey.senozhatsky.work@...il.com>, Sergey Senozhatsky <sergey.senozhatsky@...il.com> Subject: [RFC][PATCHv2 5/8] sysrq: switch to printk.emergency mode in unsafe places It's not always possible/safe to wake_up() printk kernel thread from sysrq (theoretically). Thus we better switch printk() to emergency mode in some of the sysrq handlers, which allows us to immediately flush pending kernel message to the console. This patch adds printk_emergency_begin/on sections. Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@...il.com> Suggested-by: Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp> --- drivers/tty/sysrq.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c index c6fc7141d7b2..817dfb69914d 100644 --- a/drivers/tty/sysrq.c +++ b/drivers/tty/sysrq.c @@ -49,6 +49,7 @@ #include <linux/syscalls.h> #include <linux/of.h> #include <linux/rcupdate.h> +#include <linux/console.h> #include <asm/ptrace.h> #include <asm/irq_regs.h> @@ -239,6 +240,7 @@ static DECLARE_WORK(sysrq_showallcpus, sysrq_showregs_othercpus); static void sysrq_handle_showallcpus(int key) { + printk_emergency_begin(); /* * Fall back to the workqueue based printing if the * backtrace printing did not succeed or the @@ -253,6 +255,7 @@ static void sysrq_handle_showallcpus(int key) } schedule_work(&sysrq_showallcpus); } + printk_emergency_end(); } static struct sysrq_key_op sysrq_showallcpus_op = { @@ -279,8 +282,10 @@ static struct sysrq_key_op sysrq_showregs_op = { static void sysrq_handle_showstate(int key) { + printk_emergency_begin(); show_state(); show_workqueue_state(); + printk_emergency_end(); } static struct sysrq_key_op sysrq_showstate_op = { .handler = sysrq_handle_showstate, @@ -291,7 +296,9 @@ static struct sysrq_key_op sysrq_showstate_op = { static void sysrq_handle_showstate_blocked(int key) { + printk_emergency_begin(); show_state_filter(TASK_UNINTERRUPTIBLE); + printk_emergency_end(); } static struct sysrq_key_op sysrq_showstate_blocked_op = { .handler = sysrq_handle_showstate_blocked, -- 2.12.2
Powered by blists - more mailing lists