diff options
Diffstat (limited to 'libc/include/bits/fortify/socket.h')
-rw-r--r-- | libc/include/bits/fortify/socket.h | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/libc/include/bits/fortify/socket.h b/libc/include/bits/fortify/socket.h index 3d070c526..35fad3dfd 100644 --- a/libc/include/bits/fortify/socket.h +++ b/libc/include/bits/fortify/socket.h @@ -37,18 +37,15 @@ ssize_t __recvfrom_chk(int, void*, size_t, size_t, int, struct sockaddr*, #if defined(__BIONIC_FORTIFY) -#define __recvfrom_bad_size "'recvfrom' called with size bigger than buffer" -#define __sendto_bad_size "'sendto' called with size bigger than buffer" - #if __ANDROID_API__ >= __ANDROID_API_N__ __BIONIC_FORTIFY_INLINE ssize_t recvfrom(int fd, void* const buf __pass_object_size0, size_t len, int flags, struct sockaddr* src_addr, socklen_t* addr_len) __overloadable - __clang_error_if(__bos(buf) != __BIONIC_FORTIFY_UNKNOWN_SIZE && __bos(buf) < len, - __recvfrom_bad_size) { + __clang_error_if(__bos_unevaluated_lt(__bos0(buf), len), + "'recvfrom' called with size bigger than buffer") { size_t bos = __bos0(buf); - if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) { + if (__bos_trivially_not_lt(bos, len)) { return __call_bypassing_fortify(recvfrom)(fd, buf, len, flags, src_addr, addr_len); } return __recvfrom_chk(fd, buf, len, bos, flags, src_addr, addr_len); @@ -59,11 +56,11 @@ ssize_t recvfrom(int fd, void* const buf __pass_object_size0, size_t len, int fl __BIONIC_FORTIFY_INLINE ssize_t sendto(int fd, const void* const buf __pass_object_size0, size_t len, int flags, const struct sockaddr* dest_addr, socklen_t addr_len) __overloadable - __clang_error_if(__bos0(buf) != __BIONIC_FORTIFY_UNKNOWN_SIZE && __bos0(buf) < len, - __sendto_bad_size) { + __clang_error_if(__bos_unevaluated_lt(__bos0(buf), len), + "'sendto' called with size bigger than buffer") { size_t bos = __bos0(buf); - if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) { + if (__bos_trivially_not_lt(bos, len)) { return __call_bypassing_fortify(sendto)(fd, buf, len, flags, dest_addr, addr_len); } return __sendto_chk(fd, buf, len, bos, flags, dest_addr, addr_len); @@ -73,7 +70,7 @@ ssize_t sendto(int fd, const void* const buf __pass_object_size0, size_t len, in __BIONIC_FORTIFY_INLINE ssize_t recv(int socket, void* const buf __pass_object_size0, size_t len, int flags) __overloadable - __clang_error_if(__bos0(buf) != __BIONIC_FORTIFY_UNKNOWN_SIZE && __bos0(buf) < len, + __clang_error_if(__bos_unevaluated_lt(__bos0(buf), len), "'recv' called with size bigger than buffer") { return recvfrom(socket, buf, len, flags, NULL, 0); } @@ -81,11 +78,9 @@ ssize_t recv(int socket, void* const buf __pass_object_size0, size_t len, int fl __BIONIC_FORTIFY_INLINE ssize_t send(int socket, const void* const buf __pass_object_size0, size_t len, int flags) __overloadable - __clang_error_if(__bos0(buf) != __BIONIC_FORTIFY_UNKNOWN_SIZE && __bos0(buf) < len, + __clang_error_if(__bos_unevaluated_lt(__bos0(buf), len), "'send' called with size bigger than buffer") { return sendto(socket, buf, len, flags, NULL, 0); } -#undef __recvfrom_bad_size -#undef __sendto_bad_size #endif /* __BIONIC_FORTIFY */ |