Commit 6c90fb7d authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Linus Torvalds

[PATCH] ppc64: syscall error test incorrect for 64 bits results

The syscall return path on ppc64 checks if the error is between
-LAST_ERRNO and 0, if it is, does the usual inversion along with
setting a CR bit indicating to glibc that an error occured.

However, we had an interesting bug where we used a 32 bits logica
(unsigned) comparison, thus possibly doing false positives for
valid 64 bits unsigned values whose low 32 bits happen to be in
the error range.

Fix that.
parent 5f746471
...@@ -139,7 +139,7 @@ _GLOBAL(ret_from_syscall_1) ...@@ -139,7 +139,7 @@ _GLOBAL(ret_from_syscall_1)
91: 91:
#endif #endif
li r10,-_LAST_ERRNO li r10,-_LAST_ERRNO
cmpl 0,r3,r10 cmpld 0,r3,r10
blt 30f blt 30f
neg r3,r3 neg r3,r3
22: ld r10,_CCR(r1) /* Set SO bit in CR */ 22: ld r10,_CCR(r1) /* Set SO bit in CR */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment