diff options
author | 2022-10-03 12:15:03 -0700 | |
---|---|---|
committer | 2022-10-11 12:05:16 +0000 | |
commit | 22afe6d71c324502d99074749a3e84c577c3316b (patch) | |
tree | 691e2707809112f1a85703198f78007f5e914bae | |
parent | be282e173efd05b53632fe16d843474368283191 (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.go | 8 | ||||
-rw-r--r-- | runtime/Android.bp | 32 | ||||
-rw-r--r-- | runtime/thread.cc | 4 | ||||
-rw-r--r-- | test/Android.bp | 22 |
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, }, |