ppc64: syscall error test incorrect for 64 bits results
PATCH 1/1 ppc64: syscall error test incorrect for 64 bits results
Hi !
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.
This patch fixes that.
===== arch/ppc64/kernel/entry.S 1.32 vs edited =====
arch/ppc64/kernel/entry.S +1 -1
@@ -139,7 +139,7 @@ 91: #endif li r10,-_LAST_ERRNO - cmpl 0,r3,r10 + cmpld 0,r3,r10 blt 30f neg r3,r3 22: ld r10,_CCR(r1) /* Set SO bit in CR */