linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] sysrq: Use panic() to force a crash
@ 2018-09-20 17:12 Matthias Kaehlcke
  2018-11-14 22:57 ` Matthias Kaehlcke
  0 siblings, 1 reply; 3+ messages in thread
From: Matthias Kaehlcke @ 2018-09-20 17:12 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby
  Cc: linux-kernel, Evan Green, Sai Prakash Ranjan, Douglas Anderson,
	Stephen Boyd, Manoj Gupta, Nick Desaulniers, Matthias Kaehlcke

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>
---
 drivers/tty/sysrq.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index 06ed20dd01ba..d779a51499a0 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,
-- 
2.19.0.444.g18242da7ef-goog


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] sysrq: Use panic() to force a crash
  2018-09-20 17:12 [PATCH v2] sysrq: Use panic() to force a crash Matthias Kaehlcke
@ 2018-11-14 22:57 ` Matthias Kaehlcke
  2018-11-14 23:02   ` Greg Kroah-Hartman
  0 siblings, 1 reply; 3+ messages in thread
From: Matthias Kaehlcke @ 2018-11-14 22:57 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby
  Cc: linux-kernel, Evan Green, Sai Prakash Ranjan, Douglas Anderson,
	Stephen Boyd, Manoj Gupta, Nick Desaulniers

On Thu, Sep 20, 2018 at 10:12:53AM -0700, Matthias Kaehlcke wrote:
> 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>
> ---
>  drivers/tty/sysrq.c | 13 +++----------
>  1 file changed, 3 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
> index 06ed20dd01ba..d779a51499a0 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,

Does this need further changes or is it ready to land?

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] sysrq: Use panic() to force a crash
  2018-11-14 22:57 ` Matthias Kaehlcke
@ 2018-11-14 23:02   ` Greg Kroah-Hartman
  0 siblings, 0 replies; 3+ messages in thread
From: Greg Kroah-Hartman @ 2018-11-14 23:02 UTC (permalink / raw)
  To: Matthias Kaehlcke
  Cc: Jiri Slaby, linux-kernel, Evan Green, Sai Prakash Ranjan,
	Douglas Anderson, Stephen Boyd, Manoj Gupta, Nick Desaulniers

On Wed, Nov 14, 2018 at 02:57:18PM -0800, Matthias Kaehlcke wrote:
> On Thu, Sep 20, 2018 at 10:12:53AM -0700, Matthias Kaehlcke wrote:
> > 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>
> > ---
> >  drivers/tty/sysrq.c | 13 +++----------
> >  1 file changed, 3 insertions(+), 10 deletions(-)
> > 
> > diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
> > index 06ed20dd01ba..d779a51499a0 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,
> 
> Does this need further changes or is it ready to land?

Ugh, it somehow got dropped from my queue, sorry.  I'll add it back and
get to it next week, my fault.

greg k-h

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-11-14 23:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-20 17:12 [PATCH v2] sysrq: Use panic() to force a crash Matthias Kaehlcke
2018-11-14 22:57 ` Matthias Kaehlcke
2018-11-14 23:02   ` Greg Kroah-Hartman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).