forked from OSchip/llvm-project
Handle NetBSD symbol renaming in msan_interceptors.cc
Summary: NetBSD renames symbols for historical and compat reasons. Add required symbol renames in sanitizer_common_interceptors.inc: - gettimeofday -> __gettimeofday50 - getrusage -> __getrusage50 - shmctl -> __shmctl50 Additionally handle sigaction symbol mangling. Rename the function symbol in the file to SIGACTION_SYMNAME and define it as __sigaction14 for NetBSD and sigaction for !NetBSD. We cannot use simple renaming with the proprocessor, as there are valid fields named sigaction and they must be left intact. Sponsored by <The NetBSD Foundation> Reviewers: joerg, eugenis, vitalybuka, dvyukov Reviewed By: vitalybuka Subscribers: kubamracek, llvm-commits, #sanitizers Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D40766 llvm-svn: 319966
This commit is contained in:
parent
64533cf630
commit
bf228b9200
|
@ -22,6 +22,7 @@
|
|||
#include "msan_thread.h"
|
||||
#include "msan_poisoning.h"
|
||||
#include "sanitizer_common/sanitizer_platform_limits_posix.h"
|
||||
#include "sanitizer_common/sanitizer_platform_limits_netbsd.h"
|
||||
#include "sanitizer_common/sanitizer_allocator.h"
|
||||
#include "sanitizer_common/sanitizer_allocator_interface.h"
|
||||
#include "sanitizer_common/sanitizer_allocator_internal.h"
|
||||
|
@ -33,6 +34,11 @@
|
|||
#include "sanitizer_common/sanitizer_linux.h"
|
||||
#include "sanitizer_common/sanitizer_tls_get_addr.h"
|
||||
|
||||
#if SANITIZER_NETBSD
|
||||
#define gettimeofday __gettimeofday50
|
||||
#define getrusage __getrusage50
|
||||
#endif
|
||||
|
||||
#include <stdarg.h>
|
||||
// ACHTUNG! No other system header includes in this file.
|
||||
// Ideally, we should get rid of stdarg.h as well.
|
||||
|
@ -1134,21 +1140,6 @@ INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg,
|
|||
return REAL(__cxa_atexit)(MSanAtExitWrapper, r, dso_handle);
|
||||
}
|
||||
|
||||
DECLARE_REAL(int, shmctl, int shmid, int cmd, void *buf)
|
||||
|
||||
INTERCEPTOR(void *, shmat, int shmid, const void *shmaddr, int shmflg) {
|
||||
ENSURE_MSAN_INITED();
|
||||
void *p = REAL(shmat)(shmid, shmaddr, shmflg);
|
||||
if (p != (void *)-1) {
|
||||
__sanitizer_shmid_ds ds;
|
||||
int res = REAL(shmctl)(shmid, shmctl_ipc_stat, &ds);
|
||||
if (!res) {
|
||||
__msan_unpoison(p, ds.shm_segsz);
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
static void BeforeFork() {
|
||||
StackDepotLockAll();
|
||||
ChainedOriginDepotLockAll();
|
||||
|
@ -1340,7 +1331,7 @@ static int sigaction_impl(int signo, const __sanitizer_sigaction *act,
|
|||
pnew_act->sigaction = (decltype(pnew_act->sigaction))new_cb;
|
||||
}
|
||||
}
|
||||
res = REAL(sigaction)(signo, pnew_act, oldact);
|
||||
res = REAL(SIGACTION_SYMNAME)(signo, pnew_act, oldact);
|
||||
if (res == 0 && oldact) {
|
||||
uptr cb = (uptr)oldact->sigaction;
|
||||
if (cb == (uptr)SignalAction || cb == (uptr)SignalHandler) {
|
||||
|
@ -1348,7 +1339,7 @@ static int sigaction_impl(int signo, const __sanitizer_sigaction *act,
|
|||
}
|
||||
}
|
||||
} else {
|
||||
res = REAL(sigaction)(signo, act, oldact);
|
||||
res = REAL(SIGACTION_SYMNAME)(signo, act, oldact);
|
||||
}
|
||||
|
||||
if (res == 0 && oldact) {
|
||||
|
@ -1430,6 +1421,19 @@ static int msan_dl_iterate_phdr_cb(__sanitizer_dl_phdr_info *info, SIZE_T size,
|
|||
return cbdata->callback(info, size, cbdata->data);
|
||||
}
|
||||
|
||||
INTERCEPTOR(void *, shmat, int shmid, const void *shmaddr, int shmflg) {
|
||||
ENSURE_MSAN_INITED();
|
||||
void *p = REAL(shmat)(shmid, shmaddr, shmflg);
|
||||
if (p != (void *)-1) {
|
||||
__sanitizer_shmid_ds ds;
|
||||
int res = REAL(shmctl)(shmid, shmctl_ipc_stat, &ds);
|
||||
if (!res) {
|
||||
__msan_unpoison(p, ds.shm_segsz);
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
INTERCEPTOR(int, dl_iterate_phdr, dl_iterate_phdr_cb callback, void *data) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, dl_iterate_phdr, callback, data);
|
||||
|
|
|
@ -575,6 +575,8 @@ extern const int si_SEGV_ACCERR;
|
|||
COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) == \
|
||||
offsetof(struct CLASS, MEMBER))
|
||||
|
||||
#define SIGACTION_SYMNAME __sigaction14
|
||||
|
||||
#endif // SANITIZER_NETBSD
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1498,6 +1498,8 @@ struct __sanitizer_cookie_io_functions_t {
|
|||
COMPILER_CHECK(offsetof(struct __sanitizer_##CLASS, MEMBER) == \
|
||||
offsetof(struct CLASS, MEMBER))
|
||||
|
||||
#define SIGACTION_SYMNAME sigaction
|
||||
|
||||
#endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_MAC
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue