diff --git a/libc/bionic/__memcpy_chk.cpp b/libc/bionic/__memcpy_chk.cpp index b36cfdda5..a3d744c2a 100644 --- a/libc/bionic/__memcpy_chk.cpp +++ b/libc/bionic/__memcpy_chk.cpp @@ -45,7 +45,7 @@ extern "C" void *__memcpy_chk(void *dest, const void *src, size_t copy_amount, size_t dest_len) { - if (__builtin_expect(copy_amount > dest_len, 0)) { + if (__predict_false(copy_amount > dest_len)) { __fortify_chk_fail("memcpy buffer overflow", BIONIC_EVENT_MEMCPY_BUFFER_OVERFLOW); } diff --git a/libc/bionic/__memmove_chk.cpp b/libc/bionic/__memmove_chk.cpp index ff770b5aa..49a059782 100644 --- a/libc/bionic/__memmove_chk.cpp +++ b/libc/bionic/__memmove_chk.cpp @@ -44,7 +44,7 @@ extern "C" void *__memmove_chk (void *dest, const void *src, size_t len, size_t dest_len) { - if (len > dest_len) { + if (__predict_false(len > dest_len)) { __fortify_chk_fail("memmove buffer overflow", BIONIC_EVENT_MEMMOVE_BUFFER_OVERFLOW); } diff --git a/libc/bionic/__memset_chk.cpp b/libc/bionic/__memset_chk.cpp index b201ed2ea..f7a5f241e 100644 --- a/libc/bionic/__memset_chk.cpp +++ b/libc/bionic/__memset_chk.cpp @@ -42,7 +42,7 @@ * greater than 0. */ extern "C" void *__memset_chk (void *dest, int c, size_t n, size_t dest_len) { - if (n > dest_len) { + if (__predict_false(n > dest_len)) { __fortify_chk_fail("memset buffer overflow", BIONIC_EVENT_MEMSET_BUFFER_OVERFLOW); } diff --git a/libc/bionic/__strcpy_chk.cpp b/libc/bionic/__strcpy_chk.cpp index bfb664235..5aa0e93e6 100644 --- a/libc/bionic/__strcpy_chk.cpp +++ b/libc/bionic/__strcpy_chk.cpp @@ -44,7 +44,7 @@ extern "C" char *__strcpy_chk (char *dest, const char *src, size_t dest_len) { // TODO: optimize so we don't scan src twice. size_t src_len = strlen(src) + 1; - if (src_len > dest_len) { + if (__predict_false(src_len > dest_len)) { __fortify_chk_fail("strcpy buffer overflow", BIONIC_EVENT_STRCPY_BUFFER_OVERFLOW); } diff --git a/libc/bionic/__strlcat_chk.cpp b/libc/bionic/__strlcat_chk.cpp index 96f62f9aa..25c67adca 100644 --- a/libc/bionic/__strlcat_chk.cpp +++ b/libc/bionic/__strlcat_chk.cpp @@ -45,7 +45,7 @@ extern "C" size_t __strlcat_chk(char *dest, const char *src, size_t supplied_size, size_t dest_len_from_compiler) { - if (supplied_size > dest_len_from_compiler) { + if (__predict_false(supplied_size > dest_len_from_compiler)) { __fortify_chk_fail("strlcat buffer overflow", 0); } diff --git a/libc/bionic/__strlcpy_chk.cpp b/libc/bionic/__strlcpy_chk.cpp index 636966b5f..f6b11fc57 100644 --- a/libc/bionic/__strlcpy_chk.cpp +++ b/libc/bionic/__strlcpy_chk.cpp @@ -45,7 +45,7 @@ extern "C" size_t __strlcpy_chk(char *dest, const char *src, size_t supplied_size, size_t dest_len_from_compiler) { - if (supplied_size > dest_len_from_compiler) { + if (__predict_false(supplied_size > dest_len_from_compiler)) { __fortify_chk_fail("strlcpy buffer overflow", 0); } diff --git a/libc/bionic/__strlen_chk.cpp b/libc/bionic/__strlen_chk.cpp index 6ebf09c6f..151a497a6 100644 --- a/libc/bionic/__strlen_chk.cpp +++ b/libc/bionic/__strlen_chk.cpp @@ -56,7 +56,7 @@ extern "C" size_t __strlen_chk(const char *s, size_t s_len) { size_t ret = strlen(s); - if (__builtin_expect(ret >= s_len, 0)) { + if (__predict_false(ret >= s_len)) { __fortify_chk_fail("strlen read overflow", 0); } diff --git a/libc/bionic/__strncpy_chk.cpp b/libc/bionic/__strncpy_chk.cpp index 0f1797e2a..b01879cba 100644 --- a/libc/bionic/__strncpy_chk.cpp +++ b/libc/bionic/__strncpy_chk.cpp @@ -44,7 +44,7 @@ extern "C" char *__strncpy_chk (char *dest, const char *src, size_t len, size_t dest_len) { - if (len > dest_len) { + if (__predict_false(len > dest_len)) { __fortify_chk_fail("strncpy buffer overflow", BIONIC_EVENT_STRNCPY_BUFFER_OVERFLOW); } diff --git a/libc/bionic/__umask_chk.cpp b/libc/bionic/__umask_chk.cpp index ff67ed69d..8fe95a28a 100644 --- a/libc/bionic/__umask_chk.cpp +++ b/libc/bionic/__umask_chk.cpp @@ -42,7 +42,7 @@ * greater than 0. */ extern "C" mode_t __umask_chk(mode_t mode) { - if ((mode & 0777) != mode) { + if (__predict_false((mode & 0777) != mode)) { __fortify_chk_fail("umask called with invalid mask", 0); } diff --git a/libc/bionic/__vsnprintf_chk.cpp b/libc/bionic/__vsnprintf_chk.cpp index 0fdda3ece..2d3a81ecb 100644 --- a/libc/bionic/__vsnprintf_chk.cpp +++ b/libc/bionic/__vsnprintf_chk.cpp @@ -50,7 +50,7 @@ extern "C" int __vsnprintf_chk( const char *format, va_list va) { - if (supplied_size > dest_len_from_compiler) { + if (__predict_false(supplied_size > dest_len_from_compiler)) { __fortify_chk_fail("vsnprintf buffer overflow", 0); } diff --git a/libc/bionic/open.c b/libc/bionic/open.c index e3573a3ca..424573f94 100644 --- a/libc/bionic/open.c +++ b/libc/bionic/open.c @@ -52,7 +52,7 @@ int open(const char *pathname, int flags, ...) } int __open_2(const char *pathname, int flags) { - if (flags & O_CREAT) { + if (__predict_false(flags & O_CREAT)) { __fortify_chk_fail("open(O_CREAT) called without specifying a mode", 0); }