Re: git: 930a7c2ac67e - main - compiler-rt: re-exec with ASLR disabled when necessary
Date: Tue, 08 Feb 2022 22:30:24 UTC
On 5/02/2022 3:20 am, Ed Maste wrote:
> The branch main has been updated by emaste:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=930a7c2ac67e1e8e511aa1d0a31a16c632060ebb
>
> commit 930a7c2ac67e1e8e511aa1d0a31a16c632060ebb
> Author: Ed Maste <emaste@FreeBSD.org>
> AuthorDate: 2022-01-16 19:22:05 +0000
> Commit: Ed Maste <emaste@FreeBSD.org>
> CommitDate: 2022-02-04 16:20:00 +0000
>
> compiler-rt: re-exec with ASLR disabled when necessary
>
> Some sanitizers (at least msan) currently require ASLR to be disabled.
> When we detect that ASLR is enabled, re-exec with it disabled rather
> than exiting with an error. See LLVM GitHub issue 53256 for more
> detail: https://github.com/llvm/llvm-project/issues/53256
>
> No objection: dim
> MFC after: 2 weeks
> Sponsored by: The FreeBSD Foundation
> Differential Revision: https://reviews.freebsd.org/D33934
> ---
> .../compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
> index 09b3f31831df..daa07c15490e 100644
> --- a/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
> +++ b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
> @@ -2197,8 +2197,11 @@ void CheckASLR() {
> }
> if ((aslr_status & PROC_ASLR_ACTIVE) != 0) {
> Printf("This sanitizer is not compatible with enabled ASLR "
> - "and binaries compiled with PIE\n");
> - Die();
> + "and binaries compiled with PIE\n"
> + "ASLR will be disabled and the program re-executed.\n");
> + int aslr_ctl = PROC_ASLR_FORCE_DISABLE;
> + CHECK_NE(procctl(P_PID, 0, PROC_ASLR_CTL, &aslr_ctl), -1);
> + ReExec();
> }
> #else
> // Do nothing
>
Could we sysctl tunable this, defaulting to previous behaviour?
Feels useful, particularly with respect to compatibility with *San
behaviour elsewhere and cases where a re-exec may not be desirable
./koobs