Skip to contentSkip to conversation

ppc64: syscall error test incorrect for 64 bits results

PATCH New Benjamin Herrenschmidt 1 participant 1 message Mar 29, 2004

lore
Share & tools
lore
#0 lore raw

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 */