Messages in this thread | | | Subject | Re: [PATCH] tty/sysrq: Make local variable 'killer' in sysrq_handle_crash() global | From | Sai Prakash Ranjan <> | Date | Tue, 18 Sep 2018 11:39:20 +0530 |
| |
On 9/18/2018 3:03 AM, Matthias Kaehlcke wrote: > sysrq_handle_crash() dereferences a NULL pointer on purpose to force > an exception, the local variable 'killer' is assigned to NULL and > dereferenced later. Clang detects the NULL pointer dereference at compile > time and emits a BRK instruction (on arm64) instead of the expected NULL > pointer exception. Change 'killer' to a global variable (and rename it > to 'sysrq_killer' to avoid possible clashes) to prevent Clang from > detecting the condition. By default global variables are initialized > with zero/NULL in C, therefore an explicit initialization is not needed. > > Reported-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> > Suggested-by: Evan Green <evgreen@chromium.org> > Signed-off-by: Matthias Kaehlcke <mka@chromium.org> > --- > drivers/tty/sysrq.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c > index 06ed20dd01ba..49fa8e758690 100644 > --- a/drivers/tty/sysrq.c > +++ b/drivers/tty/sysrq.c > @@ -132,10 +132,10 @@ static struct sysrq_key_op sysrq_unraw_op = { > #define sysrq_unraw_op (*(struct sysrq_key_op *)NULL) > #endif /* CONFIG_VT */ > > +char *sysrq_killer; > + > 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' > @@ -144,7 +144,7 @@ static void sysrq_handle_crash(int key) > rcu_read_unlock(); > panic_on_oops = 1; /* force panic */ > wmb(); > - *killer = 1; > + *sysrq_killer = 1; > } > static struct sysrq_key_op sysrq_crash_op = { > .handler = sysrq_handle_crash, >
Tested-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
-- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
| |