diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-09-06 15:34:17 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-09-06 15:34:17 +0000 |
commit | 73166796a3fe5665147d0c1608e17497fc12dc48 (patch) | |
tree | 565f6019ba291bf5710a04d72e3a0a5ce1874c76 /compiler-rt | |
parent | 09d33c67e1473b6f4139fbb5b4402950e0d0a4c9 (diff) | |
download | bcm5719-llvm-73166796a3fe5665147d0c1608e17497fc12dc48.tar.gz bcm5719-llvm-73166796a3fe5665147d0c1608e17497fc12dc48.zip |
[sanitizer] Avoid including any system headers in the system-header-free part of the runtime library.
llvm-svn: 190161
Diffstat (limited to 'compiler-rt')
3 files changed, 58 insertions, 27 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc index f8fc97924ba..10809c7b25e 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc @@ -284,7 +284,8 @@ POST_SYSCALL(getsid)(long res, long pid) {} PRE_SYSCALL(getgroups)(long gidsetsize, void *grouplist) {} -POST_SYSCALL(getgroups)(long res, long gidsetsize, __kernel_gid_t *grouplist) { +POST_SYSCALL(getgroups)(long res, long gidsetsize, + __sanitizer___kernel_gid_t *grouplist) { if (res >= 0) { if (grouplist) POST_WRITE(grouplist, res * sizeof(*grouplist)); } @@ -330,11 +331,12 @@ PRE_SYSCALL(setsid)() {} POST_SYSCALL(setsid)(long res) {} -PRE_SYSCALL(setgroups)(long gidsetsize, __kernel_gid_t *grouplist) { +PRE_SYSCALL(setgroups)(long gidsetsize, __sanitizer___kernel_gid_t *grouplist) { if (grouplist) POST_WRITE(grouplist, gidsetsize * sizeof(*grouplist)); } -POST_SYSCALL(setgroups)(long res, long gidsetsize, __kernel_gid_t *grouplist) {} +POST_SYSCALL(setgroups)(long res, long gidsetsize, + __sanitizer___kernel_gid_t *grouplist) {} PRE_SYSCALL(acct)(const void *name) { if (name) @@ -1267,7 +1269,7 @@ POST_SYSCALL(io_cancel)(long res, long ctx_id, void *iocb, void *result) { PRE_SYSCALL(sendfile)(long out_fd, long in_fd, void *offset, long count) {} POST_SYSCALL(sendfile)(long res, long out_fd, long in_fd, - __kernel_off_t *offset, long count) { + __sanitizer___kernel_off_t *offset, long count) { if (res >= 0) { if (offset) POST_WRITE(offset, sizeof(*offset)); } @@ -1276,7 +1278,7 @@ POST_SYSCALL(sendfile)(long res, long out_fd, long in_fd, PRE_SYSCALL(sendfile64)(long out_fd, long in_fd, void *offset, long count) {} POST_SYSCALL(sendfile64)(long res, long out_fd, long in_fd, - __kernel_loff_t *offset, long count) { + __sanitizer___kernel_loff_t *offset, long count) { if (res >= 0) { if (offset) POST_WRITE(offset, sizeof(*offset)); } @@ -1388,8 +1390,9 @@ POST_SYSCALL(setresuid16)(long res, long ruid, long euid, long suid) {} PRE_SYSCALL(getresuid16)(void *ruid, void *euid, void *suid) {} -POST_SYSCALL(getresuid16)(long res, __kernel_old_uid_t *ruid, - __kernel_old_uid_t *euid, __kernel_old_uid_t *suid) { +POST_SYSCALL(getresuid16)(long res, __sanitizer___kernel_old_uid_t *ruid, + __sanitizer___kernel_old_uid_t *euid, + __sanitizer___kernel_old_uid_t *suid) { if (res >= 0) { if (ruid) POST_WRITE(ruid, sizeof(*ruid)); if (euid) POST_WRITE(euid, sizeof(*euid)); @@ -1403,8 +1406,9 @@ POST_SYSCALL(setresgid16)(long res, long rgid, long egid, long sgid) {} PRE_SYSCALL(getresgid16)(void *rgid, void *egid, void *sgid) {} -POST_SYSCALL(getresgid16)(long res, __kernel_old_gid_t *rgid, - __kernel_old_gid_t *egid, __kernel_old_gid_t *sgid) { +POST_SYSCALL(getresgid16)(long res, __sanitizer___kernel_old_gid_t *rgid, + __sanitizer___kernel_old_gid_t *egid, + __sanitizer___kernel_old_gid_t *sgid) { if (res >= 0) { if (rgid) POST_WRITE(rgid, sizeof(*rgid)); if (egid) POST_WRITE(egid, sizeof(*egid)); @@ -1420,21 +1424,23 @@ PRE_SYSCALL(setfsgid16)(long gid) {} POST_SYSCALL(setfsgid16)(long res, long gid) {} -PRE_SYSCALL(getgroups16)(long gidsetsize, __kernel_old_gid_t *grouplist) {} +PRE_SYSCALL(getgroups16)(long gidsetsize, + __sanitizer___kernel_old_gid_t *grouplist) {} POST_SYSCALL(getgroups16)(long res, long gidsetsize, - __kernel_old_gid_t *grouplist) { + __sanitizer___kernel_old_gid_t *grouplist) { if (res >= 0) { if (grouplist) POST_WRITE(grouplist, res * sizeof(*grouplist)); } } -PRE_SYSCALL(setgroups16)(long gidsetsize, __kernel_old_gid_t *grouplist) { +PRE_SYSCALL(setgroups16)(long gidsetsize, + __sanitizer___kernel_old_gid_t *grouplist) { if (grouplist) POST_WRITE(grouplist, gidsetsize * sizeof(*grouplist)); } POST_SYSCALL(setgroups16)(long res, long gidsetsize, - __kernel_old_gid_t *grouplist) {} + __sanitizer___kernel_old_gid_t *grouplist) {} PRE_SYSCALL(getuid16)() {} @@ -1807,11 +1813,13 @@ POST_SYSCALL(poll)(long res, __sanitizer_pollfd *ufds, long nfds, } } -PRE_SYSCALL(select)(long n, __kernel_fd_set *inp, __kernel_fd_set *outp, - __kernel_fd_set *exp, void *tvp) {} +PRE_SYSCALL(select)(long n, __sanitizer___kernel_fd_set *inp, + __sanitizer___kernel_fd_set *outp, + __sanitizer___kernel_fd_set *exp, void *tvp) {} -POST_SYSCALL(select)(long res, long n, __kernel_fd_set *inp, - __kernel_fd_set *outp, __kernel_fd_set *exp, void *tvp) { +POST_SYSCALL(select)(long res, long n, __sanitizer___kernel_fd_set *inp, + __sanitizer___kernel_fd_set *outp, + __sanitizer___kernel_fd_set *exp, void *tvp) { if (res >= 0) { if (inp) POST_WRITE(inp, sizeof(*inp)); if (outp) POST_WRITE(outp, sizeof(*outp)); @@ -2587,11 +2595,14 @@ POST_SYSCALL(old_readdir)(long res, long arg0, void *arg1, long arg2) { // Missing definition of 'struct old_linux_dirent'. } -PRE_SYSCALL(pselect6)(long arg0, __kernel_fd_set *arg1, __kernel_fd_set *arg2, - __kernel_fd_set *arg3, void *arg4, void *arg5) {} +PRE_SYSCALL(pselect6)(long arg0, __sanitizer___kernel_fd_set *arg1, + __sanitizer___kernel_fd_set *arg2, + __sanitizer___kernel_fd_set *arg3, void *arg4, + void *arg5) {} -POST_SYSCALL(pselect6)(long res, long arg0, __kernel_fd_set *arg1, - __kernel_fd_set *arg2, __kernel_fd_set *arg3, void *arg4, +POST_SYSCALL(pselect6)(long res, long arg0, __sanitizer___kernel_fd_set *arg1, + __sanitizer___kernel_fd_set *arg2, + __sanitizer___kernel_fd_set *arg3, void *arg4, void *arg5) { if (res >= 0) { if (arg1) POST_WRITE(arg1, sizeof(*arg1)); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc index 26fef2a4f20..3c8abcaa639 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc @@ -58,6 +58,7 @@ #include <linux/soundcard.h> #include <linux/sysctl.h> #include <linux/utsname.h> +#include <linux/posix_types.h> #endif #if !SANITIZER_ANDROID @@ -863,6 +864,14 @@ CHECK_SIZE_AND_OFFSET(__sysctl_args, oldval); CHECK_SIZE_AND_OFFSET(__sysctl_args, oldlenp); CHECK_SIZE_AND_OFFSET(__sysctl_args, newval); CHECK_SIZE_AND_OFFSET(__sysctl_args, newlen); + +CHECK_TYPE_SIZE(__kernel_uid_t); +CHECK_TYPE_SIZE(__kernel_gid_t); +CHECK_TYPE_SIZE(__kernel_old_uid_t); +CHECK_TYPE_SIZE(__kernel_old_gid_t); +CHECK_TYPE_SIZE(__kernel_off_t); +CHECK_TYPE_SIZE(__kernel_loff_t); +CHECK_TYPE_SIZE(__kernel_fd_set); #endif #endif // SANITIZER_LINUX || SANITIZER_MAC diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h index af563d0cbd5..88f398d7e4e 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h @@ -17,12 +17,6 @@ #include "sanitizer_platform.h" -#if SANITIZER_LINUX -// This header is limited to declaration of __kernel_*_t, which are unlikely to -// conflict with any sanitizer declarations. -#include <linux/posix_types.h> -#endif - namespace __sanitizer { extern unsigned struct_utsname_sz; extern unsigned struct_stat_sz; @@ -166,6 +160,23 @@ namespace __sanitizer { }; #endif +#if SANITIZER_LINUX +#ifdef _LP64 + typedef unsigned __sanitizer___kernel_uid_t; + typedef unsigned __sanitizer___kernel_gid_t; +#else + typedef unsigned short __sanitizer___kernel_uid_t; + typedef unsigned short __sanitizer___kernel_gid_t; +#endif + typedef unsigned short __sanitizer___kernel_old_uid_t; + typedef unsigned short __sanitizer___kernel_old_gid_t; + typedef long __sanitizer___kernel_off_t; + typedef long long __sanitizer___kernel_loff_t; + typedef struct { + unsigned long fds_bits[1024 / (8 * sizeof(long))]; + } __sanitizer___kernel_fd_set; +#endif + // This thing depends on the platform. We are only interested in the upper // limit. Verified with a compiler assert in .cc. const int pthread_attr_t_max_sz = 128; |