lkml.org 
[lkml]   [2018]   [Sep]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH] tty/sysrq: Make local variable 'killer' in sysrq_handle_crash() global
    From
    Date
    On 09/17/2018, 11:33 PM, 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;

    Just because a static analyzer is wrong? Oh wait, even compiler is
    wrong. At least make it a static global. Or what about OPTIMIZER_HIDE_VAR?

    thanks,
    --
    js
    suse labs

    \
     
     \ /
      Last update: 2018-09-18 08:12    [W:4.515 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site