summaryrefslogtreecommitdiffstats
path: root/drivers/tty/sysrq.c
diff options
context:
space:
mode:
authorMatthias Kaehlcke2018-09-20 19:12:53 +0200
committerGreg Kroah-Hartman2018-11-27 11:16:35 +0100
commit8341f2f222d729688014ce8306727fdb9798d37e (patch)
treeb1cab8b656ee5361cabb7a61327681b6c23aec88 /drivers/tty/sysrq.c
parenttty/sysrq: add of_node_put() (diff)
downloadkernel-qcow2-linux-8341f2f222d729688014ce8306727fdb9798d37e.tar.gz
kernel-qcow2-linux-8341f2f222d729688014ce8306727fdb9798d37e.tar.xz
kernel-qcow2-linux-8341f2f222d729688014ce8306727fdb9798d37e.zip
sysrq: Use panic() to force a crash
sysrq_handle_crash() currently forces a crash by dereferencing a NULL pointer, which is undefined behavior in C. Just call panic() instead, which is simpler and doesn't depend on compiler specific handling of the undefined behavior. Remove the comment on why the RCU lock needs to be released, it isn't accurate anymore since the crash now isn't handled by the page fault handler (for reference: the comment was added by commit 984cf355aeaa ("sysrq: Fix warning in sysrq generated crash.")). Releasing the lock is still good practice though. Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Matthias Kaehlcke <mka@chromium.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty/sysrq.c')
-rw-r--r--drivers/tty/sysrq.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index 4bba54e62204..28fb20e9f984 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -134,17 +134,10 @@ static struct sysrq_key_op sysrq_unraw_op = {
static void sysrq_handle_crash(int key)
{
- char *killer = NULL;
-
- /* we need to release the RCU read lock here,
- * otherwise we get an annoying
- * 'BUG: sleeping function called from invalid context'
- * complaint from the kernel before the panic.
- */
+ /* release the RCU read lock before crashing */
rcu_read_unlock();
- panic_on_oops = 1; /* force panic */
- wmb();
- *killer = 1;
+
+ panic("sysrq triggered crash\n");
}
static struct sysrq_key_op sysrq_crash_op = {
.handler = sysrq_handle_crash,