aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--sysdeps/tile/tilegx/memchr.c4
-rw-r--r--sysdeps/tile/tilepro/memchr.c4
3 files changed, 12 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 5388306806..9498803f7f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2017-01-16 Chris Metcalf <cmetcalf@mellanox.com>
+ * sysdeps/tile/tilegx/memchr.c (__memchr): Handle pointer
+ wrap-around.
+ * sysdeps/tile/tilepro/memchr.c (__memchr): Likewise.
+
* sysdeps/unix/sysv/linux/tile/ipc_priv.h: New file.
2016-01-14 Siddhesh Poyarekar <siddhesh@sourceware.org>
diff --git a/sysdeps/tile/tilegx/memchr.c b/sysdeps/tile/tilegx/memchr.c
index 34df19d231..7da0f79da2 100644
--- a/sysdeps/tile/tilegx/memchr.c
+++ b/sysdeps/tile/tilegx/memchr.c
@@ -51,6 +51,10 @@ __memchr (const void *s, int c, size_t n)
/* Compute the address of the last byte. */
last_byte_ptr = (const char *) s + n - 1;
+ /* Handle possible addition overflow. */
+ if (__glibc_unlikely ((uintptr_t) last_byte_ptr < (uintptr_t) s))
+ last_byte_ptr = (const char *) UINTPTR_MAX;
+
/* Compute the address of the word containing the last byte. */
last_word_ptr = (const uint64_t *) ((uintptr_t) last_byte_ptr & -8);
diff --git a/sysdeps/tile/tilepro/memchr.c b/sysdeps/tile/tilepro/memchr.c
index 1848a9cadb..fba1f70c2c 100644
--- a/sysdeps/tile/tilepro/memchr.c
+++ b/sysdeps/tile/tilepro/memchr.c
@@ -51,6 +51,10 @@ __memchr (const void *s, int c, size_t n)
/* Compute the address of the last byte. */
last_byte_ptr = (const char *) s + n - 1;
+ /* Handle possible addition overflow. */
+ if (__glibc_unlikely ((uintptr_t) last_byte_ptr < (uintptr_t) s))
+ last_byte_ptr = (const char *) UINTPTR_MAX;
+
/* Compute the address of the word containing the last byte. */
last_word_ptr = (const uint32_t *) ((uintptr_t) last_byte_ptr & -4);