This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] powerpc: Fix powerpc32/power7 memchr for large input sizes
- From: "Tulio Magno Quites Machado Filho" <tuliom at linux dot vnet dot ibm dot com>
- To: libc-alpha at sourceware dot org
- Cc: adhemerval dot zanella at linaro dot org
- Date: Fri, 23 Dec 2016 17:47:40 -0200
- Subject: [PATCH] powerpc: Fix powerpc32/power7 memchr for large input sizes
- Authentication-results: sourceware.org; auth=none
The same error fixed in commit b224637928e9fc04e3cef3e10d02ccf042d01584
happens in the 32-bit implementation of memchr for power7.
This patch adopts the same solution, with a minimal change: it
implements a saturated addition where overflows sets the maximum pointer
size to UINTPTR_MAX.
2016-12-23 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
* sysdeps/powerpc/powerpc32/power7/memchr.S (__memchr): Avoid an
overflow in pointer addition.
---
sysdeps/powerpc/powerpc32/power7/memchr.S | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/sysdeps/powerpc/powerpc32/power7/memchr.S b/sysdeps/powerpc/powerpc32/power7/memchr.S
index 318168b..5ce2bb0 100644
--- a/sysdeps/powerpc/powerpc32/power7/memchr.S
+++ b/sysdeps/powerpc/powerpc32/power7/memchr.S
@@ -26,7 +26,16 @@ ENTRY (__memchr)
dcbt 0,r3
clrrwi r8,r3,2
insrwi r4,r4,8,16 /* Replicate byte to word. */
- add r7,r3,r5 /* Calculate the last acceptable address. */
+
+ /* Calculate the last acceptable address and check for possible
+ addition overflow by using satured math:
+ r7 = r3 + r5
+ r7 |= -(r7 < x) */
+ add r7,r3,r5
+ subfc r6,r3,r7
+ subfe r9,r9,r9
+ or r7,r7,r9
+
insrwi r4,r4,16,0
cmplwi r5,16
li r9, -1
--
2.1.0