• Naveen N. Rao's avatar
    powerpc/signal: Properly handle return value from uprobe_deny_signal() · 46725b17
    Naveen N. Rao authored
    When a uprobe is installed on an instruction that we currently do not
    emulate, we copy the instruction into a xol buffer and single step
    that instruction. If that instruction generates a fault, we abort the
    single stepping before invoking the signal handler. Once the signal
    handler is done, the uprobe trap is hit again since the instruction is
    retried and the process repeats.
    
    We use uprobe_deny_signal() to detect if the xol instruction triggered
    a signal. If so, we clear TIF_SIGPENDING and set TIF_UPROBE so that the
    signal is not handled until after the single stepping is aborted. In
    this case, uprobe_deny_signal() returns true and get_signal() ends up
    returning 0. However, in do_signal(), we are not looking at the return
    value, but depending on ksig.sig for further action, all with an
    uninitialized ksig that is not touched in this scenario. Fix the same
    by initializing ksig.sig to 0.
    
    Fixes: 129b69df ("powerpc: Use get_signal() signal_setup_done()")
    Cc: stable@vger.kernel.org # v3.17+
    Reported-by: default avatarAnton Blanchard <anton@samba.org>
    Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    46725b17
signal.c 5.63 KB