summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chih-Hung Hsieh <chh@google.com> 2022-10-03 12:15:03 -0700
committer Nicolas Geoffray <ngeoffray@google.com> 2022-10-11 12:05:16 +0000
commit22afe6d71c324502d99074749a3e84c577c3316b (patch)
tree691e2707809112f1a85703198f78007f5e914bae
parentbe282e173efd05b53632fe16d843474368283191 (diff)
Fix art-asan test mprotect errors
* Add -fsanitize-address-use-after-return=never in test/runtime cc defaults. * Increase stack frame size limit. * Avoid LOG(FATAL) in thread.cc. Bug: 249586057 Test: presubmit; art-asan Change-Id: I5728ea721e1699b9266dbb7265c9f4198de1e841
-rw-r--r--build/art.go8
-rw-r--r--runtime/Android.bp32
-rw-r--r--runtime/thread.cc4
-rw-r--r--test/Android.bp22
4 files changed, 62 insertions, 4 deletions
diff --git a/build/art.go b/build/art.go
index 383517bd1a..7b06353ca1 100644
--- a/build/art.go
+++ b/build/art.go
@@ -93,7 +93,7 @@ func globalFlags(ctx android.LoadHookContext) ([]string, []string) {
// the debug version. So make the gap consistent (and adjust for the worst).
if len(ctx.Config().SanitizeDevice()) > 0 || len(ctx.Config().SanitizeHost()) > 0 {
cflags = append(cflags,
- "-DART_STACK_OVERFLOW_GAP_arm=8192",
+ "-DART_STACK_OVERFLOW_GAP_arm=16384",
"-DART_STACK_OVERFLOW_GAP_arm64=16384",
"-DART_STACK_OVERFLOW_GAP_x86=16384",
"-DART_STACK_OVERFLOW_GAP_x86_64=20480")
@@ -153,7 +153,11 @@ func hostFlags(ctx android.LoadHookContext) []string {
if len(ctx.Config().SanitizeHost()) > 0 {
// art/test/137-cfi/cfi.cc
// error: stack frame size of 1944 bytes in function 'Java_Main_unwindInProcess'
- hostFrameSizeLimit = 6400
+ // b/249586057, need larger stack frame for newer clang compilers
+ hostFrameSizeLimit = 10000
+ // cannot add "-fsanitize-address-use-after-return=never" everywhere,
+ // or some file like compiler_driver.o can have stack frame of 30072 bytes.
+ // cflags = append(cflags, "-fsanitize-address-use-after-return=never")
}
cflags = append(cflags,
fmt.Sprintf("-Wframe-larger-than=%d", hostFrameSizeLimit),
diff --git a/runtime/Android.bp b/runtime/Android.bp
index c47325087e..7bc685de3e 100644
--- a/runtime/Android.bp
+++ b/runtime/Android.bp
@@ -37,6 +37,12 @@ JIT_DEBUG_REGISTER_CODE_LDFLAGS = [
libart_cc_defaults {
name: "libart_nativeunwind_defaults",
target: {
+ host: {
+ cflags: [
+ "-fsanitize-address-use-after-return=never",
+ "-Wno-unused-command-line-argument",
+ ],
+ },
android_arm: {
// Arm 32 bit does not produce complete exidx unwind information
// so keep the .debug_frame which is relatively small and does
@@ -441,6 +447,10 @@ libart_cc_defaults {
"runtime_linux.cc",
"thread_linux.cc",
],
+ cflags: [
+ "-fsanitize-address-use-after-return=never",
+ "-Wno-unused-command-line-argument",
+ ],
shared_libs: [
"libz", // For adler32.
],
@@ -513,6 +523,12 @@ libart_static_cc_defaults {
"libz",
],
target: {
+ host: {
+ cflags: [
+ "-fsanitize-address-use-after-return=never",
+ "-Wno-unused-command-line-argument",
+ ],
+ },
bionic: {
whole_static_libs: [
"libasync_safe", // libunwindstack dependency on Bionic.
@@ -675,6 +691,14 @@ art_cc_library {
art_cc_defaults {
name: "libart-runtime-gtest-defaults",
+ target: {
+ host: {
+ cflags: [
+ "-fsanitize-address-use-after-return=never",
+ "-Wno-unused-command-line-argument",
+ ],
+ },
+ },
tidy_timeout_srcs: [
"common_runtime_test.cc",
],
@@ -720,6 +744,14 @@ art_cc_library {
art_cc_defaults {
name: "art_runtime_tests_defaults",
+ target: {
+ host: {
+ cflags: [
+ "-fsanitize-address-use-after-return=never",
+ "-Wno-unused-command-line-argument",
+ ],
+ },
+ },
data: [
":art-gtest-jars-AllFields",
":art-gtest-jars-ErroneousA",
diff --git a/runtime/thread.cc b/runtime/thread.cc
index 547d63887d..c9a0a152bb 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -4640,9 +4640,11 @@ bool Thread::ProtectStack(bool fatal_on_error) {
VLOG(threads) << "Protecting stack at " << pregion;
if (mprotect(pregion, kStackOverflowProtectedSize, PROT_NONE) == -1) {
if (fatal_on_error) {
- LOG(FATAL) << "Unable to create protected region in stack for implicit overflow check. "
+ // b/249586057, LOG(FATAL) times out
+ LOG(ERROR) << "Unable to create protected region in stack for implicit overflow check. "
"Reason: "
<< strerror(errno) << " size: " << kStackOverflowProtectedSize;
+ exit(1);
}
return false;
}
diff --git a/test/Android.bp b/test/Android.bp
index f68a4981d4..3830f9a976 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -58,7 +58,11 @@ art_module_cc_defaults {
cflags: ["-Wno-frame-larger-than="],
},
host: {
- cflags: ["-Wno-frame-larger-than="],
+ cflags: [
+ "-Wno-frame-larger-than=",
+ "-fsanitize-address-use-after-return=never",
+ "-Wno-unused-command-line-argument",
+ ],
},
},
}
@@ -220,6 +224,10 @@ art_cc_defaults {
shared_libs: [
"libziparchive",
],
+ cflags: [
+ "-fsanitize-address-use-after-return=never",
+ "-Wno-unused-command-line-argument",
+ ],
},
},
}
@@ -343,6 +351,12 @@ art_cc_defaults {
"libgtest_isolated",
],
target: {
+ host: {
+ cflags: [
+ "-fsanitize-address-use-after-return=never",
+ "-Wno-unused-command-line-argument",
+ ],
+ },
android32: {
cflags: ["-DART_TARGET_NATIVETEST_DIR=/data/nativetest/art"],
},
@@ -417,6 +431,12 @@ art_cc_defaults {
"liblog",
],
target: {
+ host: {
+ cflags: [
+ "-fsanitize-address-use-after-return=never",
+ "-Wno-unused-command-line-argument",
+ ],
+ },
darwin: {
enabled: false,
},