]> git.neil.brown.name Git - history.git/commit
[PATCH] x86_64: fix syscall/signal restart bug
authorAndi Kleen <ak@suse.de>
Mon, 20 Dec 2004 08:06:46 +0000 (00:06 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Mon, 20 Dec 2004 08:06:46 +0000 (00:06 -0800)
commit0233f53fa39d43e2f923c3485502b0461cecc0d7
tree7170d59511adac8775187b8d993723f02560bacd
parent39509e479c8ed347452d4ebc75edad6a20216490
[PATCH] x86_64: fix syscall/signal restart bug

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: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/x86_64/kernel/signal.c