• Andi Kleen's avatar
    [PATCH] x86_64: fix syscall/signal restart bug · 0233f53f
    Andi Kleen authored
    Fix a pretty bad bug that caused sometimes signals on x86-64
    to be restarted like system calls. This corrupted the RIP and
    in general caused undesirable effects.
    
    The problem happens because orig_rax is unsigned on x86-64,
    but it originally was signed when the signal code was written.
    And the if (orig_rax >= 0) ended up always true.
    And gcc didn't warn about this, because the warning is only in 
    -Wextra. 
    
    In 2.4 we still had a cast for it, but somehow it got dropped
    in 2.5.
    
    Credit goes to John Slice for tracking it down and Erich Boleyn
    for the original fix. All blame to me. I fixed it at another
    place too.
    Signed-off-by: default avatarAndi Kleen <ak@suse.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    0233f53f
signal.c 12.3 KB