diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-09-02 17:49:15 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-09-02 17:49:15 +0000 |
| commit | c91bd9b24203f9d90a76788d12407ecda9af35f2 (patch) | |
| tree | 5628b2a0052ceea4b41292fbca83efdf9baa2662 /lib/sanitizer_common/sanitizer_linux.cc | |
| parent | f6479ce7c68fac471d59b77fc86c3fc3c09b23a4 (diff) | |
vendor/compiler-rt/compiler-rt-release_900-r372316vendor/compiler-rt/compiler-rt-release_90-r371301vendor/compiler-rt/compiler-rt-release_90-r370514vendor/compiler-rt-90
Notes
Diffstat (limited to 'lib/sanitizer_common/sanitizer_linux.cc')
| -rw-r--r-- | lib/sanitizer_common/sanitizer_linux.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/sanitizer_common/sanitizer_linux.cc b/lib/sanitizer_common/sanitizer_linux.cc index 455fd4c861de..73960fee5be6 100644 --- a/lib/sanitizer_common/sanitizer_linux.cc +++ b/lib/sanitizer_common/sanitizer_linux.cc @@ -2011,6 +2011,35 @@ void CheckASLR() { CHECK_NE(personality(old_personality | ADDR_NO_RANDOMIZE), -1); ReExec(); } +#elif SANITIZER_FREEBSD + int aslr_pie; + uptr len = sizeof(aslr_pie); +#if SANITIZER_WORDSIZE == 64 + if (UNLIKELY(internal_sysctlbyname("kern.elf64.aslr.pie_enable", + &aslr_pie, &len, NULL, 0) == -1)) { + // We're making things less 'dramatic' here since + // the OID is not necessarily guaranteed to be here + // just yet regarding FreeBSD release + return; + } + + if (aslr_pie > 0) { + Printf("This sanitizer is not compatible with enabled ASLR " + "and binaries compiled with PIE\n"); + Die(); + } +#endif + // there might be 32 bits compat for 64 bits + if (UNLIKELY(internal_sysctlbyname("kern.elf32.aslr.pie_enable", + &aslr_pie, &len, NULL, 0) == -1)) { + return; + } + + if (aslr_pie > 0) { + Printf("This sanitizer is not compatible with enabled ASLR " + "and binaries compiled with PIE\n"); + Die(); + } #else // Do nothing #endif |
