From b7d35c1ad50957829fed7c7d5d126eeb3e0886b9 Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Wed, 19 Jul 2023 13:39:54 -0700 Subject: [PATCH] Add example for wrap.sh based HWASan --- sanitizers/app/build.gradle | 17 +++++++++++++++++ .../src/hwasan/resources/lib/arm64-v8a/wrap.sh | 2 ++ sanitizers/app/src/main/cpp/native-lib.cpp | 2 +- sanitizers/build.gradle | 6 +++--- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 sanitizers/app/src/hwasan/resources/lib/arm64-v8a/wrap.sh diff --git a/sanitizers/app/build.gradle b/sanitizers/app/build.gradle index 746bbe032..c6b83415b 100644 --- a/sanitizers/app/build.gradle +++ b/sanitizers/app/build.gradle @@ -12,6 +12,9 @@ android { applicationId "com.example.sanitizers" // If you raise minSdk to 23 or higher, make sure you've read the note // below about useLegacyPackaging. + // + // Note that the hwasan build type will override this. See the + // androidComponents stanza below. minSdk 21 targetSdk 32 versionCode 1 @@ -25,8 +28,17 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } + // HWASan for devices starting from Android 14. Does no longer require a special system image. + // See https://developer.android.com/ndk/guides/hwasan. hwasan { initWith debug + debuggable true + packagingOptions { + jniLibs { + // Needed for wrap.sh. + useLegacyPackaging = true + } + } externalNativeBuild { cmake { arguments "-DANDROID_STL=c++_shared", "-DSANITIZE=hwasan" @@ -86,6 +98,11 @@ android { buildFeatures { viewBinding true } + androidComponents { + beforeVariants(selector().withBuildType("hwasan")) { variantBuilder -> + variantBuilder.minSdk = 34 + } + } } dependencies { diff --git a/sanitizers/app/src/hwasan/resources/lib/arm64-v8a/wrap.sh b/sanitizers/app/src/hwasan/resources/lib/arm64-v8a/wrap.sh new file mode 100644 index 000000000..88445fce9 --- /dev/null +++ b/sanitizers/app/src/hwasan/resources/lib/arm64-v8a/wrap.sh @@ -0,0 +1,2 @@ +#!/system/bin/sh +LD_HWASAN=1 exec "$@" diff --git a/sanitizers/app/src/main/cpp/native-lib.cpp b/sanitizers/app/src/main/cpp/native-lib.cpp index c3472dab6..fdfb4647f 100644 --- a/sanitizers/app/src/main/cpp/native-lib.cpp +++ b/sanitizers/app/src/main/cpp/native-lib.cpp @@ -17,4 +17,4 @@ Java_com_example_sanitizers_MainActivity_stringFromJNI(JNIEnv* env, std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); -} \ No newline at end of file +} diff --git a/sanitizers/build.gradle b/sanitizers/build.gradle index 253697423..765d0a25b 100644 --- a/sanitizers/build.gradle +++ b/sanitizers/build.gradle @@ -1,6 +1,6 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '7.3.1' apply false - id 'com.android.library' version '7.3.1' apply false + id 'com.android.application' version '8.2.1' apply false + id 'com.android.library' version '8.2.1' apply false id 'org.jetbrains.kotlin.android' version '1.7.20' apply false -} \ No newline at end of file +} diff --git a/sanitizers/gradle/wrapper/gradle-wrapper.properties b/sanitizers/gradle/wrapper/gradle-wrapper.properties index d2aec0c03..0eecdbea8 100644 --- a/sanitizers/gradle/wrapper/gradle-wrapper.properties +++ b/sanitizers/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Jan 17 09:59:11 CST 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME