• Denys Vlasenko's avatar
    ptrace: make PTRACE_SEIZE set ptrace options specified in 'data' parameter · aa9147c9
    Denys Vlasenko authored
    This can be used to close a few corner cases in strace where we get
    unwanted racy behavior after attach, but before we have a chance to set
    options (the notorious post-execve SIGTRAP comes to mind), and removes
    the need to track "did we set opts for this task" state in strace
    internals.
    
    While we are at it:
    
    Make it possible to extend SEIZE in the future with more functionality
    by passing non-zero 'addr' parameter.  To that end, error out if 'addr'
    is non-zero.  PTRACE_ATTACH did not (and still does not) have such
    check, and users (strace) do pass garbage there...  let's avoid
    repeating this mistake with SEIZE.
    
    Set all task->ptrace bits in one operation - before this change, we were
    adding PT_SEIZED and PT_PTRACE_CAP with task->ptrace |= BIT ops.  This
    was probably ok (not a bug), but let's be on a safer side.
    
    Changes since v2: use (unsigned long) casts instead of (long) ones, move
    PTRACE_SEIZE_DEVEL-related code to separate lines of code.
    Signed-off-by: default avatarDenys Vlasenko <vda.linux@googlemail.com>
    Acked-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Pedro Alves <palves@redhat.com>
    Reviewed-by: default avatarOleg Nesterov <oleg@redhat.com>
    Cc: Jan Kratochvil <jan.kratochvil@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    aa9147c9
ptrace.c 26.9 KB