platform_bionic/libc/bionic
Evgenii Stepanov be551f596f HWASan support in bionic.
* Allow sanitization of libc (excluding existing global sanitizers)
  and disallow sanitization of linker. The latter has not been
  necessary before because HWASan is the first sanitizer to support
  static binaries (with the exception of CFI, which is not used
  globally).
* Static binary startup: initialize HWASan shadow very early so that
  almost entire libc can be sanitized. The rest of initialization is
  done in a global constructor; until that is done sanitized code can
  run but can't report errors (will simply crash with SIGTRAP).
* Switch malloc_common from je_*  to __sanitizer_*.
* Call hwasan functions when entering and leaving threads. We can not
  intercept pthread_create when libc depends on libclang_rt.hwasan.
  An alternative to this would be a callback interface like requested
  here:
    https://sourceware.org/glibc/wiki/ThreadPropertiesAPI

All of the above is behind a compile-time check
__has_feature(hwaddress_sanitizer). This means that HWASan actually
requires libc to be instrumented, and would not work otherwise. It's
an implementation choice that greatly reduces complexity of the tool.
Instrumented libc also guarantees that hwasan is present and
initialized in every process, which allows piecemeal sanitization
(i.e. library w/o main executable, or even individual static
libraries), unlike ASan.

Change-Id: If44c46b79b15049d1745ba46ec910ae4f355d19c
2018-08-21 00:15:47 +00:00
..
__bionic_get_shell_path.cpp Use treble_linker_namespace instead of treble. 2017-12-13 14:11:26 -08:00
__cmsg_nxthdr.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
__cxa_guard.cpp Always use CLOCK_MONOTONIC for pthreads and semaphores 2017-08-18 09:11:05 -07:00
__cxa_pure_virtual.cpp Move libc_log code into libasync_safe. 2017-05-03 08:50:43 -07:00
__cxa_thread_atexit_impl.cpp Fix dlclose for libraries with thread_local dtors 2018-01-10 10:24:06 +01:00
__errno.cpp Remove volatile from the __errno declaration. 2017-06-13 16:02:07 -07:00
__gnu_basename.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
__libc_current_sigrtmax.cpp Make unified headers' SIGRTMIN/SIGRTMAX usable before API 21. 2017-04-26 14:34:36 -07:00
__libc_current_sigrtmin.cpp Filter out reserved signals in functions that take sigset_t. 2018-02-27 14:12:30 -08:00
__libc_init_main_thread.cpp Inline __libc_init_global_stack_chk_guard. 2018-05-30 16:10:35 -07:00
__set_errno.cpp Move __set_errno to ndk_cruft.cpp. 2015-10-29 18:11:32 -07:00
__stack_chk_fail.cpp Move libc_log code into libasync_safe. 2017-05-03 08:50:43 -07:00
abort.cpp Add struct sigaction64 and sigaction64. 2018-02-01 14:45:15 -08:00
accept.cpp
accept4.cpp
access.cpp
android_set_abort_message.cpp Make __libc_init_main_thread and android_set_abort_message weak 2017-10-19 18:18:23 +02:00
arpa_inet.cpp Fix inet_aton on LP32. 2015-10-09 17:36:05 -07:00
assert.cpp Remove dead longjmperror. 2017-08-23 15:40:03 -07:00
atof.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
bionic_arc4random.cpp Inline __libc_arc4random_has_unlimited_entropy. 2018-02-06 15:35:15 -08:00
bionic_futex.cpp Support priority inheritance mutex in 64bit programs. 2018-01-24 16:11:07 -08:00
bionic_netlink.cpp Fix ifaddrs error handling. 2016-10-14 14:35:26 -07:00
bionic_netlink.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
bionic_systrace.cpp Move static variable out of should_trace(). 2018-01-26 17:01:55 +08:00
bionic_time_conversions.cpp Always use CLOCK_MONOTONIC for pthreads and semaphores 2017-08-18 09:11:05 -07:00
brk.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
c16rtomb.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
c32rtomb.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
chmod.cpp
chown.cpp Remove bogus transitive includes. 2014-12-29 13:29:50 -08:00
clearenv.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
clock.cpp Move <sys/sysconf.h> to <bits/sysconf.h>. 2016-04-07 18:02:00 -07:00
clock_getcpuclockid.cpp Minor clock_getcpuclockid optimization. 2016-03-07 11:54:02 -08:00
clock_nanosleep.cpp clock_nanosleep: add CLOCK_THREAD_CPUTIME_ID special case 2016-03-28 10:29:16 -07:00
clone.cpp Mark __BIONIC_WEAK_FOR_NATIVE_BRIDGE symbols 2017-10-27 10:01:46 +02:00
connect.cpp
ctype.cpp
dirent.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
dl_iterate_phdr_static.cpp All architectures have AT_SYSINFO_EHDR now. 2017-09-22 13:08:50 -07:00
dup2.cpp Fix dup2 in the case where the two fds are equal. 2015-02-23 21:52:56 -08:00
environ.cpp Mark __BIONIC_WEAK_FOR_NATIVE_BRIDGE symbols 2017-10-27 10:01:46 +02:00
error.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
ether_aton.c Fix our *ether* headers mess. 2016-05-13 11:00:22 -07:00
ether_ntoa.c Fix our *ether* headers mess. 2016-05-13 11:00:22 -07:00
eventfd_read.cpp
eventfd_write.cpp
exec.cpp Add POSIX fexecve. 2017-10-18 16:26:17 -07:00
faccessat.cpp Add details on why AT_SYMLINK_NOFOLLOW is dangerous 2017-02-14 12:55:15 -08:00
fchmod.cpp Add POSIX fexecve. 2017-10-18 16:26:17 -07:00
fchmodat.cpp Ensure raw fchmod/fchmodat syscalls are hidden. 2015-02-03 12:10:30 -08:00
fdsan.cpp libc: enable -Wimplicit-fallthrough 2018-08-15 10:11:08 -07:00
ffs.cpp
fgetxattr.cpp Add POSIX fexecve. 2017-10-18 16:26:17 -07:00
flistxattr.cpp Add POSIX fexecve. 2017-10-18 16:26:17 -07:00
flockfile.cpp Revert "Revert "Remove __sinit and __sdidinit."" 2015-12-05 07:30:59 -08:00
fork.cpp Introduce api to track fd ownership in libc. 2018-07-19 14:28:54 -07:00
fortify.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
fpclassify.cpp Remove some legacy declarations from <math.h>. 2017-10-19 14:15:31 -07:00
fsetxattr.cpp Add POSIX fexecve. 2017-10-18 16:26:17 -07:00
ftruncate.cpp Cleanup ftruncate negative test. 2015-06-01 13:22:57 -07:00
fts.c Fix various ftw/nftw "shall fail"s from POSIX. 2018-05-08 15:20:07 -07:00
ftw.cpp Fix various ftw/nftw "shall fail"s from POSIX. 2018-05-08 15:20:07 -07:00
futimens.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
getauxval.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
getcwd.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
getdomainname.cpp Add {get,set}domainname(2) 2016-03-25 14:16:58 -07:00
getentropy.cpp Rewrite getentropy. 2018-02-05 12:57:22 -08:00
gethostname.cpp gethostname.c: change to report ENAMETOOLONG error when buflen is less 2014-11-12 12:07:33 -08:00
getpagesize.cpp Break up the rest of stubs.cpp. 2016-04-06 08:34:58 -07:00
getpgrp.cpp
getpid.cpp Introduce api to track fd ownership in libc. 2018-07-19 14:28:54 -07:00
getpriority.cpp Fix getpriority/setpriority types. 2016-11-29 15:14:11 -08:00
gettid.cpp Shave another uninteresting stack frame off aborts. 2017-06-20 14:58:16 -07:00
grp_pwd.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
grp_pwd_file.cpp Merge "Require vendor users and groups to start with vendor_" 2018-05-16 16:19:28 +00:00
grp_pwd_file.h Require vendor users and groups to start with vendor_ 2018-05-15 14:10:21 -07:00
iconv.cpp Add missing includes. 2017-10-11 11:25:52 -07:00
icu.cpp Address a bunch of clang-tidy complaints. 2018-01-19 15:56:12 -08:00
icu_static.cpp Add libc_nopthread. 2017-10-16 21:31:37 -07:00
icu_wrappers.cpp Implement wcwidth(3) in terms of icu4c. 2017-07-27 17:08:24 -07:00
ifaddrs.cpp Fix google-explicit-constructor warnings. 2016-05-03 12:08:05 -07:00
initgroups.c
inotify_init.cpp
ioctl.cpp fix the mremap signature 2015-11-06 13:14:43 -08:00
isatty.c
jemalloc.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
jemalloc_wrapper.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
killpg.cpp Replace killpg. 2017-07-11 15:00:17 -07:00
langinfo.cpp Implement <langinfo.h>. 2016-11-19 11:46:54 -08:00
lchown.cpp Remove bogus transitive includes. 2014-12-29 13:29:50 -08:00
legacy_32_bit_support.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
lfs64_support.cpp CLOEXEC support in fdopen, freopen, and mkostemp/mkostemps. 2014-09-23 18:21:52 -07:00
libc_init_common.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
libc_init_common.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
libc_init_dynamic.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
libc_init_static.cpp HWASan support in bionic. 2018-08-21 00:15:47 +00:00
libgen.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
link.cpp
locale.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
lockf.cpp Fix lockf for LP32. 2016-01-26 14:32:55 -08:00
lstat.cpp
malloc_common.cpp HWASan support in bionic. 2018-08-21 00:15:47 +00:00
malloc_info.cpp
malloc_info.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
mblen.cpp Implement mblen(3). 2016-04-28 16:41:29 -07:00
mbrtoc16.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
mbrtoc32.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
memmem.cpp libc: add const-correct string.h overloads 2017-04-05 13:17:07 -07:00
mempcpy.cpp Add GNU extensions mempcpy and wmemcpy. 2015-02-18 22:02:56 -08:00
mkdir.cpp
mkfifo.cpp Add mkfifoat(3). 2014-10-23 19:10:54 -07:00
mknod.cpp
mmap.cpp Add a legacy inline for mmap64. 2017-10-05 23:41:47 -07:00
mntent.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
mremap.cpp Add a legacy inline for mmap64. 2017-10-05 23:41:47 -07:00
ndk_cruft.cpp Clean up __isthreaded. 2017-05-11 15:29:03 -07:00
net_if.cpp Fix google-explicit-constructor warnings. 2016-05-03 12:08:05 -07:00
netdb.cpp Complete <netdb.h>. 2017-10-15 10:37:51 -07:00
NetdClient.cpp Move libc_log code into libasync_safe. 2017-05-03 08:50:43 -07:00
NetdClientDispatch.cpp
netinet_in.cpp POSIX says IPPORT_RESERVED is in <netdb.h>. 2016-08-12 10:38:35 -07:00
new.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
nl_types.cpp Add trivial no-op <nl_types.h>. 2016-04-06 17:22:44 -07:00
open.cpp With O_TMPFILE, open(2) takes a mode argument. 2017-08-04 10:20:18 -07:00
pathconf.cpp Clean up <sys/limits.h> a bit. 2016-11-30 09:06:53 -08:00
pause.cpp Add sigset64_t and accompanying functions. 2018-01-30 18:47:16 -08:00
pipe.cpp
poll.cpp Filter out reserved signals in functions that take sigset_t. 2018-02-27 14:12:30 -08:00
posix_fadvise.cpp Add posix_fadvise(3). 2014-09-11 08:45:46 -07:00
posix_fallocate.cpp
posix_madvise.cpp implement posix_madvise 2014-12-04 11:01:28 -08:00
posix_timers.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
pthread_atfork.cpp Eliminate deadlock in forked child due to delayed resetting mutex lock 2016-11-07 03:32:57 +00:00
pthread_attr.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
pthread_barrier.cpp Fix pthread_barrierattr_getpshared prototype. 2016-08-11 23:18:13 -07:00
pthread_cond.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
pthread_create.cpp HWASan support in bionic. 2018-08-21 00:15:47 +00:00
pthread_detach.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
pthread_equal.cpp
pthread_exit.cpp HWASan support in bionic. 2018-08-21 00:15:47 +00:00
pthread_getcpuclockid.cpp Be more strict about using invalid pthread_ts. 2017-02-13 17:59:29 -08:00
pthread_getschedparam.cpp Be more strict about using invalid pthread_ts. 2017-02-13 17:59:29 -08:00
pthread_gettid_np.cpp Mark __BIONIC_WEAK_FOR_NATIVE_BRIDGE symbols 2017-10-27 10:01:46 +02:00
pthread_internal.cpp Drop thread list lock before abort. 2017-09-18 14:40:35 -07:00
pthread_internal.h HWASan support in bionic. 2018-08-21 00:15:47 +00:00
pthread_join.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
pthread_key.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
pthread_kill.cpp Be more strict about using invalid pthread_ts. 2017-02-13 17:59:29 -08:00
pthread_mutex.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
pthread_once.cpp Use FUTEX_WAIT_BITSET to avoid converting timeouts. 2015-11-19 13:42:03 -08:00
pthread_rwlock.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
pthread_self.cpp
pthread_setname_np.cpp Be more strict about using invalid pthread_ts. 2017-02-13 17:59:29 -08:00
pthread_setschedparam.cpp Add pthread_setschedprio. 2017-10-17 09:14:05 -07:00
pthread_spinlock.cpp Implement pthread spin. 2015-11-18 17:51:21 -08:00
ptrace.cpp
pty.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
pututline.c
raise.cpp Make raise/abort work with stale cached pid/tid values. 2017-05-10 16:42:04 -07:00
rand.cpp
readlink.cpp Remove outdated _FORTIFY_SOURCE #undefs 2017-07-21 11:25:52 -07:00
reboot.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
recv.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
rename.cpp
rmdir.cpp
scandir.cpp Implement scandirat and scandirat64. 2015-10-27 13:47:36 -07:00
sched_cpualloc.c bionic: fix assorted static analyzer warnings 2017-06-28 15:03:15 -07:00
sched_cpucount.c Type of second __sched_cpucount should be "const cpu_set_t*". 2018-04-13 16:07:21 -07:00
sched_getaffinity.cpp
sched_getcpu.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
semaphore.cpp Add _monotonic_np versions of timed wait functions 2018-03-20 18:41:22 -07:00
send.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
setegid.cpp
seteuid.cpp
setjmp_cookie.cpp Move libc_log code into libasync_safe. 2017-05-03 08:50:43 -07:00
setpgrp.cpp
sigaction.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
signal.cpp Filter out reserved signals in functions that take sigset_t. 2018-02-27 14:12:30 -08:00
sigprocmask.cpp Filter out reserved signals in functions that take sigset_t. 2018-02-27 14:12:30 -08:00
socket.cpp
spawn.cpp Introduce api to track fd ownership in libc. 2018-07-19 14:28:54 -07:00
stat.cpp
statvfs.cpp Fix instances of '#if __LP64__'. 2016-09-15 14:21:28 -07:00
stdlib_l.cpp Move non-locale.h APIs out of locale.cpp. 2017-07-12 12:41:47 -07:00
strchr.cpp Remove outdated _FORTIFY_SOURCE #undefs 2017-07-21 11:25:52 -07:00
strchrnul.cpp Add strchrnul. 2015-08-26 09:59:29 -07:00
strerror.cpp Allocate thread local buffers in __init_tls. 2017-02-22 16:05:03 -08:00
strerror_r.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
string_l.cpp Move non-locale.h APIs out of locale.cpp. 2017-07-12 12:41:47 -07:00
strings_l.cpp Move non-locale.h APIs out of locale.cpp. 2017-07-12 12:41:47 -07:00
strnlen.c
strrchr.cpp Remove outdated _FORTIFY_SOURCE #undefs 2017-07-21 11:25:52 -07:00
strsignal.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
strtol.cpp Simplify atoi*/strto* for signed integers. 2017-12-21 17:44:22 -08:00
strtold.cpp Use __RENAME for long double functions. 2017-09-14 16:10:43 -07:00
swab.cpp Add POSIX swab. 2017-10-18 13:34:32 -07:00
symlink.cpp
sync_file_range.cpp Add sync_file_range to <fcntl.h>. 2016-04-05 12:17:22 -07:00
sys_epoll.cpp Add sigset64_t and accompanying functions. 2018-01-30 18:47:16 -08:00
sys_msg.cpp [mips64] Fix ipc syscalls 2016-09-09 12:24:04 +02:00
sys_sem.cpp [mips64] Fix ipc syscalls 2016-09-09 12:24:04 +02:00
sys_shm.cpp [mips64] Fix ipc syscalls 2016-09-09 12:24:04 +02:00
sys_siglist.c Move <sys/_sigdefs.h> and <sys/_errdefs.h> to private. 2016-04-13 17:45:39 -07:00
sys_signalfd.cpp Add sigset64_t and accompanying functions. 2018-01-30 18:47:16 -08:00
sys_signame.c Move <sys/_sigdefs.h> and <sys/_errdefs.h> to private. 2016-04-13 17:45:39 -07:00
sys_time.cpp Add futimes, futimesat, and lutimes. 2016-06-08 19:51:20 -07:00
sysconf.cpp Fix sysconf errno for unknown names. 2018-04-25 22:13:14 -07:00
sysinfo.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
syslog.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
system.cpp Rewrite system(3) to use posix_spawn(3). 2018-03-05 17:20:12 -08:00
system_property_api.cpp Fixup an out of date comment. 2018-07-24 13:34:34 -07:00
system_property_set.cpp Split properties into their own class to make testing better 2017-12-18 15:17:55 -08:00
tdestroy.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
termios.cpp Make inline tcsetattr definition match constants. 2017-07-05 12:00:29 -07:00
thread_private.cpp Reimplement popen(3)/pclose(3). 2018-07-11 12:15:26 -07:00
time64.c Use snprintf instead of sprintf. 2014-10-07 11:28:47 -07:00
time64_config.h
timespec_get.cpp Add C11 timespec_get. 2018-07-17 13:21:05 -07:00
tmpfile.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
umount.cpp
unlink.cpp
vdso.cpp Clean up the time(2) implementation. 2018-01-12 15:20:28 -08:00
wait.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
wchar.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
wchar_l.cpp Add remaining _l function stubs. 2018-02-13 23:14:12 -08:00
wcstod.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
wctype.cpp Modernize codebase by replacing NULL with nullptr 2018-08-02 18:09:44 -07:00
wcwidth.cpp Implement wcwidth(3) in terms of icu4c. 2017-07-27 17:08:24 -07:00
wmempcpy.cpp Add GNU extensions mempcpy and wmemcpy. 2015-02-18 22:02:56 -08:00