diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | sysdeps/tile/tilegx/memchr.c | 4 | ||||
-rw-r--r-- | sysdeps/tile/tilepro/memchr.c | 4 |
3 files changed, 12 insertions, 0 deletions
@@ -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); |