compiler-rt-netbsd: Sync with local patches

Changes:
1. Add fts(3) interceptors
2. Add lstat(2) interceptor
3. Correct strftime(3) inteceptor for NetBSD
4. Correct fgets(3) interceptor for NetBSD
5. Add strmode(3) interceptor

Programs like chmod(1), stat(1) and similar work now under MSan.

Sponsored by <The NetBSD Foundation>
This commit is contained in:
Kamil Rytarowski 2018-01-23 23:48:19 +01:00
parent c2e617f2a5
commit 8ecbafc77f
16 changed files with 220 additions and 62 deletions

View File

@ -2,33 +2,33 @@ $NetBSD: distinfo,v 1.35 2015/09/11 01:21:57 tnn Exp $
SHA1 (patch-cmake_config-ix.cmake) = 11195c8254c84d5972a2ffee8a9e66758ab7105b
SHA1 (patch-include_CMakeLists.txt) = b6f2713b7e5337aed542442936b6f747efe0a607
SHA1 (patch-include_sanitizer_netbsd__syscall__hooks.h) = b2166de9a80f37cb09a569d73fd23e298e0ab9a6
SHA1 (patch-include_sanitizer_netbsd__syscall__hooks.h) = c7c2e602e5492dc534848705326c376cd8911124
SHA1 (patch-lib_asan_asan__interceptors.cc) = ea4005ce02775060ff52af76d568c450892067b5
SHA1 (patch-lib_esan_esan__interceptors.cpp) = a7103ca053e92a810c87c593262bb386f3d02606
SHA1 (patch-lib_fuzzer_tests_CMakeLists.txt) = bed69bc433f70ec4d88fc5aa11d47ffbd18f4b74
SHA1 (patch-lib_hwasan_hwasan__interceptors.cc) = c49ab3759728bbd3e27580a3d0d3e2db0bceb2a6
SHA1 (patch-lib_msan_msan__interceptors.cc) = 42f9f0416e1b30f15fb0f104d70d4b0ead83519f
SHA1 (patch-lib_msan_msan__interceptors.cc) = aacd9da9f5fc62e0f7cfe9ad9bcf90ceeb267630
SHA1 (patch-lib_msan_msan__linux.cc) = d75d7587071a9e7a3f6a08a3008af55319e62cab
SHA1 (patch-lib_sanitizer__common_CMakeLists.txt) = fcbf2987ccab5258fe760aef6ef47bd97e0e0b2c
SHA1 (patch-lib_sanitizer__common_sanitizer__common__interceptors.inc) = 052071b28d6852e3111910d207d7c40b3acc676d
SHA1 (patch-lib_sanitizer__common_sanitizer__common__interceptors.inc) = 7e761ee7a7991cd6c17e1dcab1aa2a67ccbd4333
SHA1 (patch-lib_sanitizer__common_sanitizer__common__interceptors__ioctl.inc) = 231f519a0564aa69d746a7f0bbee1b1aeed927a7
SHA1 (patch-lib_sanitizer__common_sanitizer__internal__defs.h) = 2ff74de8be0825ca4162969cb2ed367654934a17
SHA1 (patch-lib_sanitizer__common_sanitizer__linux.cc) = b1057f01ae2f03498613eb1a02501c8a65d16fed
SHA1 (patch-lib_sanitizer__common_sanitizer__netbsd__interceptors__ioctl.inc) = 501876c2593058c94e443dc1c6bddfc86a7b989a
SHA1 (patch-lib_sanitizer__common_sanitizer__netbsd__syscalls.inc) = 47b0815e355eba0b3c6b5e56c35568a435c8d7a6
SHA1 (patch-lib_sanitizer__common_sanitizer__platform__interceptors.h) = 9c8de18fa1661df511575a69ffdc2ff4746cd9de
SHA1 (patch-lib_sanitizer__common_sanitizer__platform__limits__netbsd.cc) = 47236661e37673d66a52e80c3f55be13029014ca
SHA1 (patch-lib_sanitizer__common_sanitizer__platform__limits__netbsd.h) = c58d9a09feaad37b02fa6490b9b3588a56663a76
SHA1 (patch-lib_sanitizer__common_sanitizer__netbsd__interceptors__ioctl.inc) = e490bf5071ec936b89c334bb3e27f0ada52e2a59
SHA1 (patch-lib_sanitizer__common_sanitizer__netbsd__syscalls.inc) = 59712a0265fa41220a711c4febca42e90a2e6412
SHA1 (patch-lib_sanitizer__common_sanitizer__platform__interceptors.h) = 430e3dc7883752ef41cacb918e6d024e7bd0031a
SHA1 (patch-lib_sanitizer__common_sanitizer__platform__limits__netbsd.cc) = 52a72419e20323a28e0c5768e114c5d6646c8006
SHA1 (patch-lib_sanitizer__common_sanitizer__platform__limits__netbsd.h) = 4bcd536820608413316034c292d651e38d834ddc
SHA1 (patch-lib_sanitizer__common_sanitizer__procmaps__freebsd.cc) = 7e0deaeeada33bd13575251e5d8fb4a0ee4c53e8
SHA1 (patch-lib_scudo_scudo__platform.h) = d44bd094136dd0381db87344fbbcad1dcfd44dc1
SHA1 (patch-lib_tsan_rtl_tsan__interceptors.cc) = 4fbaa64e3f8d28cdbab6783c296dfd31cecb45a5
SHA1 (patch-test_asan_lit.cfg) = becbc3c8c9cfd589e1dcbf1014dd4655f952c144
SHA1 (patch-test_lsan_lit.common.cfg) = 10dc251f80efb96d015a22c740dc20b1843b9a11
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_kvm__open.cc) = 673fd069eb26f82701cb241f32cee158c56a98ae
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_kvm__openfiles.cc) = 09b07f5fcf0e88a9879500433ce808250459d866
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_paccept.cc) = 677b018626ec40b7fcddf5420db4926d8da38af0
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_strlcat.cc) = ffce89f5a6f8025e7cbf0df200a3e9ba2f61be53
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_strlcpy.cc) = 8ef92e665a3505ca992ec0202ae228442a6f0896
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_kvm__open.cc) = 7bad1809f9d01b33a420c25929a9a2db5f4c178a
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_kvm__openfiles.cc) = af18e76e4c4292f7e68c3fb1534442fcb8c3dd53
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_paccept.cc) = 4be0a27702c15cf356f63d842ddefe9ad8d19843
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_strlcat.cc) = f2783fd89ec782354b16fb0774e768d22adf3056
SHA1 (patch-test_sanitizer__common_TestCases_NetBSD_strlcpy.cc) = fb76348b4e1cfc0506cd05df50ac2687f850041b
SHA1 (patch-test_scudo_lit.cfg) = 111a66513b994534bb0d69d214b7e0cb4e2b8eb8
SHA1 (patch-utils_generate__netbsd__ioctls.awk) = d3b4fa17b08c8bf33ec38af581f945d28a164a1c
SHA1 (patch-utils_generate__netbsd__syscalls.awk) = 6d503cd725990a9738d45ec4dc33397dc102bf6a
SHA1 (patch-utils_generate__netbsd__ioctls.awk) = 843dfba9bdf5e82af10474d61c67458dfb2c69ad
SHA1 (patch-utils_generate__netbsd__syscalls.awk) = dfb5d09d0631a86e503a0cb9e24918fe994ab159

View File

@ -1,6 +1,6 @@
$NetBSD$
--- include/sanitizer/netbsd_syscall_hooks.h.orig 2018-01-22 23:12:45.617372317 +0000
--- include/sanitizer/netbsd_syscall_hooks.h.orig 2018-01-23 22:46:48.351823563 +0000
+++ include/sanitizer/netbsd_syscall_hooks.h
@@ -0,0 +1,4730 @@
+//===-- netbsd_syscall_hooks.h --------------------------------------------===//

View File

@ -16,7 +16,23 @@ $NetBSD$
#endif
#include <stdarg.h>
@@ -1137,6 +1139,18 @@ INTERCEPTOR(int, pthread_join, void *th,
@@ -523,6 +525,7 @@ INTERCEPTOR(SIZE_T, __strxfrm_l, char *d
#define INTERCEPTOR_STRFTIME_BODY(char_type, ret_type, func, s, ...) \
ENSURE_MSAN_INITED(); \
+ InterceptorScope interceptor_scope; \
ret_type res = REAL(func)(s, __VA_ARGS__); \
if (s) __msan_unpoison(s, sizeof(char_type) * (res + 1)); \
return res;
@@ -788,6 +791,7 @@ INTERCEPTOR(int, socketpair, int domain,
INTERCEPTOR(char *, fgets, char *s, int size, void *stream) {
ENSURE_MSAN_INITED();
+ InterceptorScope interceptor_scope;
char *res = REAL(fgets)(s, size, stream);
if (res)
__msan_unpoison(s, REAL(strlen)(s) + 1);
@@ -1137,6 +1141,18 @@ INTERCEPTOR(int, pthread_join, void *th,
extern char *tzname[2];
@ -35,7 +51,7 @@ $NetBSD$
INTERCEPTOR(void, tzset, int fake) {
ENSURE_MSAN_INITED();
REAL(tzset)(fake);
@@ -1146,29 +1160,85 @@ INTERCEPTOR(void, tzset, int fake) {
@@ -1146,29 +1162,85 @@ INTERCEPTOR(void, tzset, int fake) {
__msan_unpoison(tzname[1], REAL(strlen)(tzname[1]) + 1);
return;
}
@ -124,7 +140,7 @@ $NetBSD$
}
static void BeforeFork() {
@@ -1322,6 +1392,11 @@ int OnExit() {
@@ -1322,6 +1394,11 @@ int OnExit() {
__msan_unpoison(to + size, 1); \
} while (false)
@ -136,7 +152,7 @@ $NetBSD$
#include "sanitizer_common/sanitizer_platform_interceptors.h"
#include "sanitizer_common/sanitizer_common_interceptors.inc"
@@ -1401,6 +1476,7 @@ static uptr signal_impl(int signo, uptr
@@ -1401,6 +1478,7 @@ static uptr signal_impl(int signo, uptr
} while (false)
#define COMMON_SYSCALL_POST_WRITE_RANGE(p, s) __msan_unpoison(p, s)
#include "sanitizer_common/sanitizer_common_syscalls.inc"
@ -144,7 +160,7 @@ $NetBSD$
struct dlinfo {
char *dli_fname;
@@ -1566,6 +1642,9 @@ namespace __msan {
@@ -1566,6 +1644,9 @@ namespace __msan {
void InitializeInterceptors() {
static int inited = 0;
CHECK_EQ(inited, 0);
@ -154,7 +170,7 @@ $NetBSD$
InitializeCommonInterceptors();
InitializeSignalInterceptors();
@@ -1682,6 +1761,7 @@ void InitializeInterceptors() {
@@ -1682,6 +1763,7 @@ void InitializeInterceptors() {
INTERCEPT_FUNCTION(pthread_join);
INTERCEPT_FUNCTION(tzset);

View File

@ -10,15 +10,28 @@ $NetBSD$
//===----------------------------------------------------------------------===//
#include "interception/interception.h"
@@ -75,6 +76,7 @@
@@ -75,6 +76,12 @@
#define clock_settime __clock_settime50
#define ctime __ctime50
#define ctime_r __ctime_r50
+#define devname __devname50
+#define fts_children __fts_children60
+#define fts_close __fts_close60
+#define fts_open __fts_open60
+#define fts_read __fts_read60
+#define fts_set __fts_set60
#define getitimer __getitimer50
#define getpwent __getpwent50
#define getpwnam __getpwnam50
@@ -108,6 +110,9 @@
@@ -90,6 +97,7 @@
#define gmtime_r __gmtime_r50
#define localtime __locatime50
#define localtime_r __localtime_r50
+#define lstat __lstat50
#define mktime __mktime50
#define opendir __opendir30
#define readdir __readdir30
@@ -108,6 +116,9 @@
#define times __times13
#define wait3 __wait350
#define wait4 __wait450
@ -28,7 +41,7 @@ $NetBSD$
#endif
// Platform-specific options.
@@ -280,6 +285,10 @@ bool PlatformHasDifferentMemcpyAndMemmov
@@ -280,6 +291,10 @@ bool PlatformHasDifferentMemcpyAndMemmov
return new_mem;
#endif
@ -39,7 +52,7 @@ $NetBSD$
struct FileMetadata {
// For open_memstream().
char **addr;
@@ -1230,6 +1239,7 @@ static void unpoison_tm(void *ctx, __san
@@ -1230,6 +1245,7 @@ static void unpoison_tm(void *ctx, __san
INTERCEPTOR(__sanitizer_tm *, localtime, unsigned long *timep) {
void *ctx;
COMMON_INTERCEPTOR_ENTER(ctx, localtime, timep);
@ -47,7 +60,7 @@ $NetBSD$
__sanitizer_tm *res = REAL(localtime)(timep);
if (res) {
COMMON_INTERCEPTOR_READ_RANGE(ctx, timep, sizeof(*timep));
@@ -1240,6 +1250,7 @@ INTERCEPTOR(__sanitizer_tm *, localtime,
@@ -1240,6 +1256,7 @@ INTERCEPTOR(__sanitizer_tm *, localtime,
INTERCEPTOR(__sanitizer_tm *, localtime_r, unsigned long *timep, void *result) {
void *ctx;
COMMON_INTERCEPTOR_ENTER(ctx, localtime_r, timep, result);
@ -55,7 +68,7 @@ $NetBSD$
__sanitizer_tm *res = REAL(localtime_r)(timep, result);
if (res) {
COMMON_INTERCEPTOR_READ_RANGE(ctx, timep, sizeof(*timep));
@@ -1250,6 +1261,7 @@ INTERCEPTOR(__sanitizer_tm *, localtime_
@@ -1250,6 +1267,7 @@ INTERCEPTOR(__sanitizer_tm *, localtime_
INTERCEPTOR(__sanitizer_tm *, gmtime, unsigned long *timep) {
void *ctx;
COMMON_INTERCEPTOR_ENTER(ctx, gmtime, timep);
@ -63,7 +76,7 @@ $NetBSD$
__sanitizer_tm *res = REAL(gmtime)(timep);
if (res) {
COMMON_INTERCEPTOR_READ_RANGE(ctx, timep, sizeof(*timep));
@@ -1260,6 +1272,7 @@ INTERCEPTOR(__sanitizer_tm *, gmtime, un
@@ -1260,6 +1278,7 @@ INTERCEPTOR(__sanitizer_tm *, gmtime, un
INTERCEPTOR(__sanitizer_tm *, gmtime_r, unsigned long *timep, void *result) {
void *ctx;
COMMON_INTERCEPTOR_ENTER(ctx, gmtime_r, timep, result);
@ -71,7 +84,7 @@ $NetBSD$
__sanitizer_tm *res = REAL(gmtime_r)(timep, result);
if (res) {
COMMON_INTERCEPTOR_READ_RANGE(ctx, timep, sizeof(*timep));
@@ -1270,6 +1283,7 @@ INTERCEPTOR(__sanitizer_tm *, gmtime_r,
@@ -1270,6 +1289,7 @@ INTERCEPTOR(__sanitizer_tm *, gmtime_r,
INTERCEPTOR(char *, ctime, unsigned long *timep) {
void *ctx;
COMMON_INTERCEPTOR_ENTER(ctx, ctime, timep);
@ -79,7 +92,7 @@ $NetBSD$
// FIXME: under ASan the call below may write to freed memory and corrupt
// its metadata. See
// https://github.com/google/sanitizers/issues/321.
@@ -1283,6 +1297,7 @@ INTERCEPTOR(char *, ctime, unsigned long
@@ -1283,6 +1303,7 @@ INTERCEPTOR(char *, ctime, unsigned long
INTERCEPTOR(char *, ctime_r, unsigned long *timep, char *result) {
void *ctx;
COMMON_INTERCEPTOR_ENTER(ctx, ctime_r, timep, result);
@ -87,7 +100,7 @@ $NetBSD$
// FIXME: under ASan the call below may write to freed memory and corrupt
// its metadata. See
// https://github.com/google/sanitizers/issues/321.
@@ -1296,6 +1311,7 @@ INTERCEPTOR(char *, ctime_r, unsigned lo
@@ -1296,6 +1317,7 @@ INTERCEPTOR(char *, ctime_r, unsigned lo
INTERCEPTOR(char *, asctime, __sanitizer_tm *tm) {
void *ctx;
COMMON_INTERCEPTOR_ENTER(ctx, asctime, tm);
@ -95,7 +108,7 @@ $NetBSD$
// FIXME: under ASan the call below may write to freed memory and corrupt
// its metadata. See
// https://github.com/google/sanitizers/issues/321.
@@ -1309,6 +1325,7 @@ INTERCEPTOR(char *, asctime, __sanitizer
@@ -1309,6 +1331,7 @@ INTERCEPTOR(char *, asctime, __sanitizer
INTERCEPTOR(char *, asctime_r, __sanitizer_tm *tm, char *result) {
void *ctx;
COMMON_INTERCEPTOR_ENTER(ctx, asctime_r, tm, result);
@ -103,7 +116,7 @@ $NetBSD$
// FIXME: under ASan the call below may write to freed memory and corrupt
// its metadata. See
// https://github.com/google/sanitizers/issues/321.
@@ -1322,6 +1339,7 @@ INTERCEPTOR(char *, asctime_r, __sanitiz
@@ -1322,6 +1345,7 @@ INTERCEPTOR(char *, asctime_r, __sanitiz
INTERCEPTOR(long, mktime, __sanitizer_tm *tm) {
void *ctx;
COMMON_INTERCEPTOR_ENTER(ctx, mktime, tm);
@ -111,7 +124,7 @@ $NetBSD$
COMMON_INTERCEPTOR_READ_RANGE(ctx, &tm->tm_sec, sizeof(tm->tm_sec));
COMMON_INTERCEPTOR_READ_RANGE(ctx, &tm->tm_min, sizeof(tm->tm_min));
COMMON_INTERCEPTOR_READ_RANGE(ctx, &tm->tm_hour, sizeof(tm->tm_hour));
@@ -1704,6 +1722,7 @@ FORMAT_INTERCEPTOR_IMPL(__isoc99_snprint
@@ -1704,6 +1728,7 @@ FORMAT_INTERCEPTOR_IMPL(__isoc99_snprint
#if SANITIZER_INTERCEPT_IOCTL
#include "sanitizer_common_interceptors_ioctl.inc"
@ -119,7 +132,7 @@ $NetBSD$
INTERCEPTOR(int, ioctl, int d, unsigned long request, ...) {
// We need a frame pointer, because we call into ioctl_common_[pre|post] which
// can trigger a report and we need to be able to unwind through this
@@ -2777,6 +2796,30 @@ INTERCEPTOR(int, accept4, int fd, void *
@@ -2777,6 +2802,30 @@ INTERCEPTOR(int, accept4, int fd, void *
#define INIT_ACCEPT4
#endif
@ -150,7 +163,7 @@ $NetBSD$
#if SANITIZER_INTERCEPT_MODF
INTERCEPTOR(double, modf, double x, double *iptr) {
void *ctx;
@@ -3165,7 +3208,14 @@ INTERCEPTOR(char *, setlocale, int categ
@@ -3165,7 +3214,14 @@ INTERCEPTOR(char *, setlocale, int categ
if (locale)
COMMON_INTERCEPTOR_READ_RANGE(ctx, locale, REAL(strlen)(locale) + 1);
char *res = REAL(setlocale)(category, locale);
@ -166,7 +179,30 @@ $NetBSD$
return res;
}
@@ -6608,6 +6658,757 @@ INTERCEPTOR(int, getgroupmembership, con
@@ -6252,6 +6308,22 @@ INTERCEPTOR(int, stat, const char *path,
#define INIT_STAT
#endif
+#if SANITIZER_INTERCEPT_LSTAT
+INTERCEPTOR(int, lstat, const char *path, void *buf) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, lstat, path, buf);
+ if (common_flags()->intercept_stat)
+ COMMON_INTERCEPTOR_READ_STRING(ctx, path, 0);
+ int res = REAL(lstat)(path, buf);
+ if (!res)
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, __sanitizer::struct_stat_sz);
+ return res;
+}
+#define INIT_LSTAT COMMON_INTERCEPT_FUNCTION(lstat)
+#else
+#define INIT_LSTAT
+#endif
+
#if SANITIZER_INTERCEPT___XSTAT
INTERCEPTOR(int, __xstat, int version, const char *path, void *buf) {
void *ctx;
@@ -6608,6 +6680,837 @@ INTERCEPTOR(int, getgroupmembership, con
#define INIT_GETGROUPLIST
#endif
@ -920,11 +956,91 @@ $NetBSD$
+#else
+#define INIT_GETNETENT
+#endif
+
+#if SANITIZER_INTERCEPT_FTS
+INTERCEPTOR(void *, fts_open, char * const *path_argv, int options,
+ int (*compar)(void **, void **)) {
+ void *ctx;
+ void *fts;
+ COMMON_INTERCEPTOR_ENTER(ctx, fts_open, path_argv, options, compar);
+ if (path_argv) {
+ char * const *pa = path_argv;
+ while (*pa) {
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, pa, sizeof(char **));
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, *pa, REAL(strlen)(*pa) + 1);
+ pa++;
+ }
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, pa, sizeof(char **));
+ }
+ fts = REAL(fts_open)(path_argv, options, compar);
+ if (fts)
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, fts, struct_FTS_sz);
+ return fts;
+}
+
+INTERCEPTOR(void *, fts_read, void *ftsp) {
+ void *ctx;
+ void *ftsent;
+ COMMON_INTERCEPTOR_ENTER(ctx, fts_read, ftsp);
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, ftsp, struct_FTS_sz);
+ ftsent = REAL(fts_read)(ftsp);
+ if (ftsent)
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ftsent, struct_FTSENT_sz);
+ return ftsent;
+}
+
+INTERCEPTOR(void *, fts_children, void *ftsp, int options) {
+ void *ctx;
+ void *ftsent;
+ COMMON_INTERCEPTOR_ENTER(ctx, fts_children, ftsp, options);
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, ftsp, struct_FTS_sz);
+ ftsent = REAL(fts_children)(ftsp, options);
+ if (ftsent)
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ftsent, struct_FTSENT_sz);
+ return ftsent;
+}
+
+INTERCEPTOR(int, fts_set, void *ftsp, void *f, int options) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, fts_set, ftsp, f, options);
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, ftsp, struct_FTS_sz);
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, f, struct_FTSENT_sz);
+ return REAL(fts_set)(ftsp, f, options);
+}
+
+INTERCEPTOR(int, fts_close, void *ftsp) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, fts_close, ftsp);
+ COMMON_INTERCEPTOR_READ_RANGE(ctx, ftsp, struct_FTS_sz);
+ return REAL(fts_close)(ftsp);
+}
+#define INIT_FTS \
+ COMMON_INTERCEPT_FUNCTION(fts_open); \
+ COMMON_INTERCEPT_FUNCTION(fts_read); \
+ COMMON_INTERCEPT_FUNCTION(fts_children); \
+ COMMON_INTERCEPT_FUNCTION(fts_set); \
+ COMMON_INTERCEPT_FUNCTION(fts_close);
+#else
+#define INIT_FTS
+#endif
+
+#if SANITIZER_INTERCEPT_STRMODE
+INTERCEPTOR(void, strmode, u32 mode, char *bp) {
+ void *ctx;
+ COMMON_INTERCEPTOR_ENTER(ctx, strmode, mode, bp);
+ REAL(strmode)(mode, bp);
+ if (bp)
+ COMMON_INTERCEPTOR_WRITE_RANGE(ctx, bp, REAL(strlen)(bp) + 1);
+}
+#define INIT_STRMODE COMMON_INTERCEPT_FUNCTION(strmode)
+#else
+#define INIT_STRMODE
+#endif
+
static void InitializeCommonInterceptors() {
static u64 metadata_mem[sizeof(MetadataHashMap) / sizeof(u64) + 1];
interceptor_metadata_map = new((void *)&metadata_mem) MetadataHashMap();
@@ -6687,6 +7488,7 @@ static void InitializeCommonInterceptors
@@ -6687,6 +7590,7 @@ static void InitializeCommonInterceptors
INIT_GETSOCKOPT;
INIT_ACCEPT;
INIT_ACCEPT4;
@ -932,7 +1048,15 @@ $NetBSD$
INIT_MODF;
INIT_RECVMSG;
INIT_SENDMSG;
@@ -6827,6 +7629,15 @@ static void InitializeCommonInterceptors
@@ -6809,6 +7713,7 @@ static void InitializeCommonInterceptors
INIT_SEND_SENDTO;
INIT_STAT;
INIT_EVENTFD_READ_WRITE;
+ INIT_LSTAT;
INIT___XSTAT;
INIT___XSTAT64;
INIT___LXSTAT;
@@ -6827,6 +7732,17 @@ static void InitializeCommonInterceptors
INIT_ACCESS;
INIT_FACCESSAT;
INIT_GETGROUPLIST;
@ -945,6 +1069,8 @@ $NetBSD$
+ INIT_FGETLN;
+ INIT_GETPROTOENT;
+ INIT_GETNETENT;
+ INIT_FTS;
+ INIT_STRMODE;
#if SANITIZER_NETBSD
COMMON_INTERCEPT_FUNCTION(__libc_mutex_lock);

View File

@ -1,6 +1,6 @@
$NetBSD$
--- lib/sanitizer_common/sanitizer_netbsd_interceptors_ioctl.inc.orig 2018-01-22 23:12:45.620394449 +0000
--- lib/sanitizer_common/sanitizer_netbsd_interceptors_ioctl.inc.orig 2018-01-23 22:46:48.355067025 +0000
+++ lib/sanitizer_common/sanitizer_netbsd_interceptors_ioctl.inc
@@ -0,0 +1,1490 @@
+//===-- sanitizer_common_interceptors_ioctl.inc -----------------*- C++ -*-===//

View File

@ -1,6 +1,6 @@
$NetBSD$
--- lib/sanitizer_common/sanitizer_netbsd_syscalls.inc.orig 2018-01-22 23:12:45.621254703 +0000
--- lib/sanitizer_common/sanitizer_netbsd_syscalls.inc.orig 2018-01-23 22:46:48.355958439 +0000
+++ lib/sanitizer_common/sanitizer_netbsd_syscalls.inc
@@ -0,0 +1,3793 @@
+//===-- sanitizer_common_syscalls.inc ---------------------------*- C++ -*-===//

View File

@ -10,7 +10,15 @@ $NetBSD$
#define SANITIZER_INTERCEPT_MODF SI_POSIX
#define SANITIZER_INTERCEPT_RECVMSG SI_POSIX
#define SANITIZER_INTERCEPT_SENDMSG SI_POSIX
@@ -440,5 +441,14 @@
@@ -405,6 +406,7 @@
#define SANITIZER_INTERCEPT_STAT \
(SI_FREEBSD || SI_MAC || SI_ANDROID || SI_NETBSD || SI_SOLARIS)
+#define SANITIZER_INTERCEPT_LSTAT SI_NETBSD
#define SANITIZER_INTERCEPT___XSTAT (!SANITIZER_INTERCEPT_STAT && SI_POSIX)
#define SANITIZER_INTERCEPT___XSTAT64 SI_LINUX_NOT_ANDROID
#define SANITIZER_INTERCEPT___LXSTAT SANITIZER_INTERCEPT___XSTAT
@@ -440,5 +442,16 @@
#define SANITIZER_INTERCEPT_ACCESS SI_NETBSD
#define SANITIZER_INTERCEPT_FACCESSAT SI_NETBSD
#define SANITIZER_INTERCEPT_GETGROUPLIST SI_NETBSD
@ -23,5 +31,7 @@ $NetBSD$
+#define SANITIZER_INTERCEPT_FGETLN SI_NETBSD
+#define SANITIZER_INTERCEPT_GETPROTOENT SI_NETBSD
+#define SANITIZER_INTERCEPT_GETNETENT SI_NETBSD
+#define SANITIZER_INTERCEPT_FTS SI_NETBSD
+#define SANITIZER_INTERCEPT_STRMODE SI_NETBSD
#endif // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H

View File

@ -172,20 +172,24 @@ $NetBSD$
#include <sys/shm.h>
#include <sys/signal.h>
#include <sys/socket.h>
@@ -67,6 +208,7 @@
@@ -67,6 +208,9 @@
#include <utmpx.h>
#include <wchar.h>
#include <wordexp.h>
+#include <ttyent.h>
+
+#include <fts.h>
// Include these after system headers to avoid name clashes and ambiguities.
#include "sanitizer_internal_defs.h"
@@ -99,18 +241,83 @@ unsigned struct_sockaddr_sz = sizeof(str
@@ -99,18 +243,85 @@ unsigned struct_sockaddr_sz = sizeof(str
unsigned ucontext_t_sz = sizeof(ucontext_t);
unsigned struct_rlimit_sz = sizeof(struct rlimit);
unsigned struct_timespec_sz = sizeof(struct timespec);
+unsigned struct_sembuf_sz = sizeof(struct sembuf);
+unsigned struct_kevent_sz = sizeof(struct kevent);
+unsigned struct_FTS_sz = sizeof(FTS);
+unsigned struct_FTSENT_sz = sizeof(FTSENT);
unsigned struct_utimbuf_sz = sizeof(struct utimbuf);
unsigned struct_itimerspec_sz = sizeof(struct itimerspec);
unsigned struct_timex_sz = sizeof(struct timex);
@ -264,7 +268,7 @@ $NetBSD$
int shmctl_ipc_stat = (int)IPC_STAT;
unsigned struct_utmp_sz = sizeof(struct utmp);
@@ -137,65 +344,1731 @@ int glob_altdirfunc = GLOB_ALTDIRFUNC;
@@ -137,65 +348,1731 @@ int glob_altdirfunc = GLOB_ALTDIRFUNC;
unsigned path_max = PATH_MAX;

View File

@ -2,7 +2,7 @@ $NetBSD$
--- lib/sanitizer_common/sanitizer_platform_limits_netbsd.h.orig 2018-01-15 06:00:16.000000000 +0000
+++ lib/sanitizer_common/sanitizer_platform_limits_netbsd.h
@@ -57,33 +57,36 @@ extern unsigned ucontext_t_sz;
@@ -57,33 +57,38 @@ extern unsigned ucontext_t_sz;
extern unsigned struct_rlimit_sz;
extern unsigned struct_utimbuf_sz;
extern unsigned struct_timespec_sz;
@ -10,6 +10,8 @@ $NetBSD$
-struct __sanitizer_iocb {
+extern unsigned struct_kevent_sz;
+extern unsigned struct_FTS_sz;
+extern unsigned struct_FTSENT_sz;
+
+union __sanitizer_sigval {
+ int sival_int;
@ -60,7 +62,7 @@ $NetBSD$
struct __sanitizer_sem_t {
uptr data[5];
};
@@ -110,6 +113,19 @@ struct __sanitizer_shmid_ds {
@@ -110,6 +115,19 @@ struct __sanitizer_shmid_ds {
void *_shm_internal;
};
@ -80,7 +82,7 @@ $NetBSD$
extern unsigned struct_msqid_ds_sz;
extern unsigned struct_mq_attr_sz;
extern unsigned struct_timex_sz;
@@ -131,6 +147,8 @@ struct __sanitizer_ifaddrs {
@@ -131,6 +149,8 @@ struct __sanitizer_ifaddrs {
unsigned int ifa_addrflags;
};
@ -89,7 +91,7 @@ $NetBSD$
typedef unsigned __sanitizer_pthread_key_t;
typedef long long __sanitizer_time_t;
@@ -200,6 +218,12 @@ struct __sanitizer_msghdr {
@@ -200,6 +220,12 @@ struct __sanitizer_msghdr {
unsigned msg_controllen;
int msg_flags;
};
@ -102,7 +104,7 @@ $NetBSD$
struct __sanitizer_cmsghdr {
unsigned cmsg_len;
int cmsg_level;
@@ -252,6 +276,22 @@ struct __sanitizer_sigaction {
@@ -252,6 +278,22 @@ struct __sanitizer_sigaction {
int sa_flags;
};
@ -125,7 +127,7 @@ $NetBSD$
typedef __sanitizer_sigset_t __sanitizer_kernel_sigset_t;
struct __sanitizer_kernel_sigaction_t {
@@ -309,6 +349,8 @@ struct __sanitizer_pollfd {
@@ -309,6 +351,8 @@ struct __sanitizer_pollfd {
typedef unsigned __sanitizer_nfds_t;
@ -134,7 +136,7 @@ $NetBSD$
struct __sanitizer_glob_t {
uptr gl_pathc;
uptr gl_matchc;
@@ -328,6 +370,54 @@ extern int glob_altdirfunc;
@@ -328,6 +372,54 @@ extern int glob_altdirfunc;
extern unsigned path_max;
@ -189,7 +191,7 @@ $NetBSD$
struct __sanitizer_wordexp_t {
uptr we_wordc;
char **we_wordv;
@@ -361,6 +451,53 @@ struct __sanitizer_ifconf {
@@ -361,6 +453,53 @@ struct __sanitizer_ifconf {
} ifc_ifcu;
};
@ -243,7 +245,7 @@ $NetBSD$
#define IOC_NRBITS 8
#define IOC_TYPEBITS 8
#define IOC_SIZEBITS 14
@@ -385,185 +522,1712 @@ struct __sanitizer_ifconf {
@@ -385,185 +524,1712 @@ struct __sanitizer_ifconf {
#define IOC_NR(nr) (((nr) >> IOC_NRSHIFT) & IOC_NRMASK)
#define IOC_SIZE(nr) (((nr) >> IOC_SIZESHIFT) & IOC_SIZEMASK)

View File

@ -1,6 +1,6 @@
$NetBSD$
--- test/sanitizer_common/TestCases/NetBSD/kvm_open.cc.orig 2018-01-22 23:12:45.623442152 +0000
--- test/sanitizer_common/TestCases/NetBSD/kvm_open.cc.orig 2018-01-23 22:46:48.358301060 +0000
+++ test/sanitizer_common/TestCases/NetBSD/kvm_open.cc
@@ -0,0 +1,13 @@
+// RUN: %clangxx -O0 -g %s -o %t && %run %t

View File

@ -1,6 +1,6 @@
$NetBSD$
--- test/sanitizer_common/TestCases/NetBSD/kvm_openfiles.cc.orig 2018-01-22 23:12:45.623530010 +0000
--- test/sanitizer_common/TestCases/NetBSD/kvm_openfiles.cc.orig 2018-01-23 22:46:48.358411709 +0000
+++ test/sanitizer_common/TestCases/NetBSD/kvm_openfiles.cc
@@ -0,0 +1,13 @@
+// RUN: %clangxx -O0 -g %s -o %t && %run %t

View File

@ -1,6 +1,6 @@
$NetBSD$
--- test/sanitizer_common/TestCases/NetBSD/paccept.cc.orig 2018-01-22 23:12:45.623624921 +0000
--- test/sanitizer_common/TestCases/NetBSD/paccept.cc.orig 2018-01-23 22:46:48.358540436 +0000
+++ test/sanitizer_common/TestCases/NetBSD/paccept.cc
@@ -0,0 +1,74 @@
+// RUN: %clangxx -O0 -g %s -o %t && %run %t

View File

@ -1,6 +1,6 @@
$NetBSD$
--- test/sanitizer_common/TestCases/NetBSD/strlcat.cc.orig 2018-01-22 23:12:45.623715166 +0000
--- test/sanitizer_common/TestCases/NetBSD/strlcat.cc.orig 2018-01-23 22:46:48.358653350 +0000
+++ test/sanitizer_common/TestCases/NetBSD/strlcat.cc
@@ -0,0 +1,56 @@
+// RUN: %clangxx -O0 -g %s -o %t && %run %t

View File

@ -1,6 +1,6 @@
$NetBSD$
--- test/sanitizer_common/TestCases/NetBSD/strlcpy.cc.orig 2018-01-22 23:12:45.623811564 +0000
--- test/sanitizer_common/TestCases/NetBSD/strlcpy.cc.orig 2018-01-23 22:46:48.358762029 +0000
+++ test/sanitizer_common/TestCases/NetBSD/strlcpy.cc
@@ -0,0 +1,56 @@
+// RUN: %clangxx -O0 -g %s -o %t && %run %t

View File

@ -1,6 +1,6 @@
$NetBSD$
--- utils/generate_netbsd_ioctls.awk.orig 2018-01-22 23:12:45.624127411 +0000
--- utils/generate_netbsd_ioctls.awk.orig 2018-01-23 22:46:48.359108232 +0000
+++ utils/generate_netbsd_ioctls.awk
@@ -0,0 +1,755 @@
+#!/usr/bin/awk -f

View File

@ -1,6 +1,6 @@
$NetBSD$
--- utils/generate_netbsd_syscalls.awk.orig 2018-01-22 23:12:45.624782606 +0000
--- utils/generate_netbsd_syscalls.awk.orig 2018-01-23 22:46:48.359824628 +0000
+++ utils/generate_netbsd_syscalls.awk
@@ -0,0 +1,2989 @@
+#!/usr/bin/awk -f