• David S. Miller's avatar
    sparc64: Fix syscall restart, for real... · 2678fefe
    David S. Miller authored
    The change I put into copy_thread() just papered over the real
    problem.
    
    When we are looking to see if we should do a syscall restart, when
    deliverying a signal, we should only interpret the syscall return
    value as an error if the carry condition code(s) are set.
    
    Otherwise it's a success return.
    
    Also, sigreturn paths should do a pt_regs_clear_trap_type().
    
    It turns out that doing a syscall restart when returning from a fork()
    does and should happen, from time to time.  Even if copy_thread()
    returns success, copy_process() can still unwind and signal
    -ERESTARTNOINTR in the parent.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2678fefe
signal.c 18.1 KB