[sanitizer] Fix solaris build

This commit is contained in:
Vitaly Buka 2021-11-10 20:40:15 -08:00
parent 642a361b7e
commit 3330a6670e

View File

@ -150,6 +150,26 @@ const int FUTEX_WAKE_PRIVATE = FUTEX_WAKE | FUTEX_PRIVATE_FLAG;
namespace __sanitizer {
void SetSigProcMask(__sanitizer_sigset_t *set, __sanitizer_sigset_t *old) {
CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, set, old));
}
ScopedBlockSignals::ScopedBlockSignals(__sanitizer_sigset_t *copy) {
__sanitizer_sigset_t set;
internal_sigfillset(&set);
# if SANITIZER_LINUX && !SANITIZER_ANDROID
// Glibc uses SIGSETXID signal during setuid call. If this signal is blocked
// on any thread, setuid call hangs.
// See test/sanitizer_common/TestCases/Linux/setuid.c.
internal_sigdelset(&set, 33);
# endif
SetSigProcMask(&set, &saved_);
if (copy)
internal_memcpy(copy, &saved_, sizeof(saved_));
}
ScopedBlockSignals::~ScopedBlockSignals() { SetSigProcMask(&saved_, nullptr); }
#if SANITIZER_LINUX && defined(__x86_64__)
#include "sanitizer_syscall_linux_x86_64.inc"
#elif SANITIZER_LINUX && SANITIZER_RISCV64
@ -842,26 +862,6 @@ uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
#endif
}
void SetSigProcMask(__sanitizer_sigset_t *set, __sanitizer_sigset_t *old) {
CHECK_EQ(0, internal_sigprocmask(SIG_SETMASK, set, old));
}
ScopedBlockSignals::ScopedBlockSignals(__sanitizer_sigset_t *copy) {
__sanitizer_sigset_t set;
internal_sigfillset(&set);
# if SANITIZER_LINUX && !SANITIZER_ANDROID
// Glibc uses SIGSETXID signal during setuid call. If this signal is blocked
// on any thread, setuid call hangs.
// See test/sanitizer_common/TestCases/Linux/setuid.c.
internal_sigdelset(&set, 33);
# endif
SetSigProcMask(&set, &saved_);
if (copy)
internal_memcpy(copy, &saved_, sizeof(saved_));
}
ScopedBlockSignals::~ScopedBlockSignals() { SetSigProcMask(&saved_, nullptr); }
void internal_sigfillset(__sanitizer_sigset_t *set) {
internal_memset(set, 0xff, sizeof(*set));
}