Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lang/gcc14-devel: Fix Address sanitizer
Software compiled with -fsanitize=address fails to run with the error message "ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD". This commit fixes the issue by ignoring the [vdso] loaded shared library instead of linux-vdso.so. PR: 267751 Reported by: yuri Co-authored-by: Andreas Tobler <andreast@gcc.gnu.org>
- Loading branch information
1 parent
9c8633f
commit 99c1ed3
Showing
3 changed files
with
37 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
lang/gcc14-devel/files/patch-libsanitizer_asan_asan__linux.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
Since the vDSO shared librares on Linux and FreeBSD are called | ||
differently, the initialization order check fails on FreeBSD. | ||
This patch fixes it by ignoring [vdso] instead of linux-vdso.so. | ||
|
||
GCC gets the original file from the LLVM Project, so this patch should | ||
probably be upstreamed directly to the LLVM Project rather than to GCC. | ||
|
||
|
||
--- libsanitizer/asan/asan_linux.cpp.orig 2022-11-23 11:22:41 UTC | ||
+++ libsanitizer/asan/asan_linux.cpp | ||
@@ -148,6 +148,12 @@ static int FindFirstDSOCallback(struct dl_phdr_info *i | ||
return 0; | ||
# endif | ||
|
||
+# if SANITIZER_FREEBSD | ||
+ // Ignore vDSO | ||
+ if (internal_strncmp(info->dlpi_name, "[vdso]", sizeof("[vdso]") - 1) == 0) | ||
+ return 0; | ||
+# endif | ||
+ | ||
*name = info->dlpi_name; | ||
return 1; | ||
} |
13 changes: 13 additions & 0 deletions
13
lang/gcc14-devel/files/patch-libsanitizer_asan_asan__thread.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
--- libsanitizer/asan/asan_thread.cpp.orig 2024-01-12 13:45:52 UTC | ||
+++ libsanitizer/asan/asan_thread.cpp | ||
@@ -323,7 +323,9 @@ void AsanThread::ClearShadowForThreadStackAndTLS() { | ||
if (tls_begin_ != tls_end_) { | ||
uptr tls_begin_aligned = RoundDownTo(tls_begin_, ASAN_SHADOW_GRANULARITY); | ||
uptr tls_end_aligned = RoundUpTo(tls_end_, ASAN_SHADOW_GRANULARITY); | ||
- FastPoisonShadow(tls_begin_aligned, tls_end_aligned - tls_begin_aligned, 0); | ||
+ FastPoisonShadowPartialRightRedzone(tls_begin_aligned, | ||
+ tls_end_ - tls_begin_aligned, | ||
+ tls_end_aligned - tls_end_, 0); | ||
} | ||
} | ||
|