• Eric W. Biederman's avatar
    signal: Always attempt to allocate siginfo for SIGSTOP · a692933a
    Eric W. Biederman authored
    Since 2.5.34 the code has had the potential to not allocate siginfo
    for SIGSTOP signals.  Except for ptrace this is perfectly fine as only
    ptrace can use PTRACE_PEEK_SIGINFO and see what the contents of
    the delivered siginfo are.
    
    Users of PTRACE_PEEK_SIGINFO that care about the contents siginfo
    for SIGSTOP are rare, but they do exist.  A seccomp self test
    has cared and lldb cares.
    
    Jack Andersen <jackoalan@gmail.com> writes:
    
    > The patch titled
    > `signal: Never allocate siginfo for SIGKILL or SIGSTOP`
    > created a regression for users of PTRACE_GETSIGINFO needing to
    > discern signals that were raised via the tgkill syscall.
    >
    > A notable user of this tgkill+ptrace combination is lldb while
    > debugging a multithreaded program. Without the ability to detect a
    > SIGSTOP originating from tgkill, lldb does not have a way to
    > synchronize on a per-thread basis and falls back to SIGSTOP-ing the
    > entire process.
    
    Everyone affected by this please note.  The kernel can still fail to
    allocate a siginfo structure.  The allocation is with GFP_KERNEL and
    is best effort only.  If memory is tight when the signal allocation
    comes in this will fail to allocate a siginfo.
    
    So I strongly recommend looking at more robust solutions for
    synchronizing with a single thread such as PTRACE_INTERRUPT.  Or if
    that does not work persuading your friendly local kernel developer to
    build the interface you need.
    Reported-by: default avatarTycho Andersen <tycho@tycho.ws>
    Reported-by: default avatarKees Cook <keescook@chromium.org>
    Reported-by: default avatarJack Andersen <jackoalan@gmail.com>
    Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Reviewed-by: default avatarChristian Brauner <christian@brauner.io>
    Cc: stable@vger.kernel.org
    Fixes: f149b315 ("signal: Never allocate siginfo for SIGKILL or SIGSTOP")
    Fixes: 6dfc8897 ("[PATCH] shared thread signals")
    History Tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.gitSigned-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    a692933a
signal.c 109 KB