Merge "Bionic: Always use fortified versions of FD_X macros"
diff --git a/libc/bionic/fortify.cpp b/libc/bionic/fortify.cpp
index 944cfca..3bd9e68 100644
--- a/libc/bionic/fortify.cpp
+++ b/libc/bionic/fortify.cpp
@@ -80,17 +80,17 @@
int __FD_ISSET_chk(int fd, const fd_set* set, size_t set_size) {
__check_fd_set("FD_ISSET", fd, set_size);
- return FD_ISSET(fd, set);
+ return __FD_ISSET(fd, set);
}
void __FD_CLR_chk(int fd, fd_set* set, size_t set_size) {
__check_fd_set("FD_CLR", fd, set_size);
- FD_CLR(fd, set);
+ __FD_CLR(fd, set);
}
void __FD_SET_chk(int fd, fd_set* set, size_t set_size) {
__check_fd_set("FD_SET", fd, set_size);
- FD_SET(fd, set);
+ __FD_SET(fd, set);
}
char* __fgets_chk(char* dst, int supplied_size, FILE* stream, size_t dst_len_from_compiler) {
diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h
index 5760689..201f40a 100644
--- a/libc/include/sys/cdefs.h
+++ b/libc/include/sys/cdefs.h
@@ -289,14 +289,22 @@
# endif
#endif
+// As we move some FORTIFY checks to be always on, __bos needs to be
+// always available.
#if defined(__BIONIC_FORTIFY)
# if _FORTIFY_SOURCE == 2
# define __bos_level 1
# else
# define __bos_level 0
# endif
-# define __bosn(s, n) __builtin_object_size((s), (n))
-# define __bos(s) __bosn((s), __bos_level)
+#else
+# define __bos_level 0
+#endif
+
+#define __bosn(s, n) __builtin_object_size((s), (n))
+#define __bos(s) __bosn((s), __bos_level)
+
+#if defined(__BIONIC_FORTIFY)
# define __bos0(s) __bosn((s), 0)
# if defined(__clang__)
# define __pass_object_size_n(n) __attribute__((pass_object_size(n)))
diff --git a/libc/include/sys/select.h b/libc/include/sys/select.h
index 603a5a6..e58df21 100644
--- a/libc/include/sys/select.h
+++ b/libc/include/sys/select.h
@@ -63,15 +63,20 @@
void __FD_SET_chk(int, fd_set*, size_t) __INTRODUCED_IN(21);
int __FD_ISSET_chk(int, const fd_set*, size_t) __INTRODUCED_IN(21);
-#if defined(__BIONIC_FORTIFY) && __ANDROID_API__ >= __ANDROID_API_L__
+#define __FD_CLR(fd, set) (__FDS_BITS(fd_set*,set)[__FDELT(fd)] &= ~__FDMASK(fd))
+#define __FD_SET(fd, set) (__FDS_BITS(fd_set*,set)[__FDELT(fd)] |= __FDMASK(fd))
+#define __FD_ISSET(fd, set) ((__FDS_BITS(const fd_set*,set)[__FDELT(fd)] & __FDMASK(fd)) != 0)
+
+
+#if __ANDROID_API__ >= __ANDROID_API_L__
#define FD_CLR(fd, set) __FD_CLR_chk(fd, set, __bos(set))
#define FD_SET(fd, set) __FD_SET_chk(fd, set, __bos(set))
#define FD_ISSET(fd, set) __FD_ISSET_chk(fd, set, __bos(set))
#else
-#define FD_CLR(fd, set) (__FDS_BITS(fd_set*,set)[__FDELT(fd)] &= ~__FDMASK(fd))
-#define FD_SET(fd, set) (__FDS_BITS(fd_set*,set)[__FDELT(fd)] |= __FDMASK(fd))
-#define FD_ISSET(fd, set) ((__FDS_BITS(const fd_set*,set)[__FDELT(fd)] & __FDMASK(fd)) != 0)
-#endif /* defined(__BIONIC_FORTIFY) && __ANDROID_API >= 21 */
+#define FD_CLR(fd, set) __FD_CLR(fd, set)
+#define FD_SET(fd, set) __FD_SET(fd, set)
+#define FD_ISSET(fd, set) __FD_ISSET(fd, set)
+#endif /* __ANDROID_API >= 21 */
int select(int __fd_count, fd_set* __read_fds, fd_set* __write_fds, fd_set* __exception_fds, struct timeval* __timeout);
int pselect(int __fd_count, fd_set* __read_fds, fd_set* __write_fds, fd_set* __exception_fds, const struct timespec* __timeout, const sigset_t* __mask);