Merge "[CTS] [tagging] Skip zero-init tests on svelte devices." into sc-dev
diff --git a/hostsidetests/tagging/common/Android.bp b/hostsidetests/tagging/common/Android.bp
index 147cbde..2e3a4cd 100644
--- a/hostsidetests/tagging/common/Android.bp
+++ b/hostsidetests/tagging/common/Android.bp
@@ -35,6 +35,7 @@
],
header_libs: ["jni_headers"],
sdk_version: "current",
+ stl: "libc++",
gtest: false,
}
diff --git a/hostsidetests/tagging/common/jni/android_cts_tagging_Utils.cpp b/hostsidetests/tagging/common/jni/android_cts_tagging_Utils.cpp
index 05220eb..fc479c2 100644
--- a/hostsidetests/tagging/common/jni/android_cts_tagging_Utils.cpp
+++ b/hostsidetests/tagging/common/jni/android_cts_tagging_Utils.cpp
@@ -16,11 +16,15 @@
#include <errno.h>
#include <jni.h>
+#include <malloc.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/prctl.h>
#include <sys/utsname.h>
+#include <string>
+
extern "C" JNIEXPORT jboolean Java_android_cts_tagging_Utils_kernelSupportsTaggedPointers() {
#ifdef __aarch64__
#define PR_SET_TAGGED_ADDR_CTRL 55
@@ -81,3 +85,14 @@
Java_android_cts_tagging_Utils_heapIsZeroInitialized(JNIEnv *) {
return sizeIsZeroInitialized(100) && sizeIsZeroInitialized(2000) && sizeIsZeroInitialized(200000);
}
+
+extern "C" JNIEXPORT jboolean JNICALL Java_android_cts_tagging_Utils_allocatorIsScudo(JNIEnv *) {
+ const size_t kMallocInfoBufSize = 8192;
+ std::string buf;
+ buf.reserve(kMallocInfoBufSize);
+ FILE *fp = fmemopen(buf.data(), kMallocInfoBufSize, "w+");
+ malloc_info(0, fp);
+ fclose(fp);
+
+ return buf.find("<malloc version=\"scudo") != std::string::npos;
+}
diff --git a/hostsidetests/tagging/common/src/android/cts/tagging/Utils.java b/hostsidetests/tagging/common/src/android/cts/tagging/Utils.java
index 4f5e387..536b9f6 100644
--- a/hostsidetests/tagging/common/src/android/cts/tagging/Utils.java
+++ b/hostsidetests/tagging/common/src/android/cts/tagging/Utils.java
@@ -26,4 +26,5 @@
public static native boolean mistaggedKernelUaccessFails();
public static native boolean heapIsZeroInitialized();
+ public static native boolean allocatorIsScudo();
}
diff --git a/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/HeapZeroInitActivity.java b/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/HeapZeroInitActivity.java
index 0ae44a8..3e87fc9 100644
--- a/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/HeapZeroInitActivity.java
+++ b/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/HeapZeroInitActivity.java
@@ -19,14 +19,21 @@
import android.app.Activity;
import android.cts.tagging.Utils;
import android.os.Bundle;
-import android.util.Log;
public class HeapZeroInitActivity extends Activity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
- boolean result = Utils.heapIsZeroInitialized();
- setResult(RESULT_FIRST_USER + (result ? 1 : 0));
+
+ if (!Utils.allocatorIsScudo()) {
+ // jemalloc doesn't support heap zero initialization. Skip this test.
+ setResult(TestActivity.RESULT_TEST_IGNORED);
+ } else if (Utils.heapIsZeroInitialized()) {
+ setResult(TestActivity.RESULT_TEST_SUCCESS);
+ } else {
+ setResult(TestActivity.RESULT_TEST_FAILED);
+ }
+
finish();
}
}
diff --git a/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/HeapZeroInitMemtagAsyncActivity.java b/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/HeapZeroInitMemtagAsyncActivity.java
index 053681a..678141a 100644
--- a/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/HeapZeroInitMemtagAsyncActivity.java
+++ b/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/HeapZeroInitMemtagAsyncActivity.java
@@ -19,14 +19,21 @@
import android.app.Activity;
import android.cts.tagging.Utils;
import android.os.Bundle;
-import android.util.Log;
public class HeapZeroInitMemtagAsyncActivity extends Activity {
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
- boolean result = Utils.heapIsZeroInitialized();
- setResult(RESULT_FIRST_USER + (result ? 1 : 0));
+
+ if (!Utils.allocatorIsScudo()) {
+ // jemalloc doesn't support heap zero initialization. Skip this test.
+ setResult(TestActivity.RESULT_TEST_IGNORED);
+ } else if (Utils.heapIsZeroInitialized()) {
+ setResult(TestActivity.RESULT_TEST_SUCCESS);
+ } else {
+ setResult(TestActivity.RESULT_TEST_FAILED);
+ }
+
finish();
}
}
diff --git a/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/TaggingTest.java b/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/TaggingTest.java
index cc5bf02..e8c50ff 100644
--- a/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/TaggingTest.java
+++ b/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/TaggingTest.java
@@ -145,14 +145,14 @@
@Test
public void testHeapZeroInitActivity() throws Exception {
TestActivity activity = mTestActivityRule.getActivity();
- boolean result = activity.callActivity(HeapZeroInitActivity.class);
- assertTrue(result);
+ activity.callActivity(HeapZeroInitActivity.class);
+ assertFalse(activity.failed());
}
@Test
public void testHeapZeroInitMemtagAsyncActivity() throws Exception {
TestActivity activity = mTestActivityRule.getActivity();
- boolean result = activity.callActivity(HeapZeroInitMemtagAsyncActivity.class);
- assertTrue(result);
+ activity.callActivity(HeapZeroInitMemtagAsyncActivity.class);
+ assertFalse(activity.failed());
}
}
diff --git a/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/TestActivity.java b/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/TestActivity.java
index ec099af..b9112e4 100644
--- a/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/TestActivity.java
+++ b/hostsidetests/tagging/sdk_30/src/android/cts/tagging/sdk30/TestActivity.java
@@ -30,6 +30,10 @@
public class TestActivity extends Activity {
static final String TAG = "TestActivity";
+ public static final int RESULT_TEST_SUCCESS = RESULT_FIRST_USER + 1;
+ public static final int RESULT_TEST_IGNORED = RESULT_FIRST_USER + 2;
+ public static final int RESULT_TEST_FAILED = RESULT_FIRST_USER + 3;
+
private int mResult;
private final Object mFinishEvent = new Object();
@@ -46,7 +50,11 @@
}
}
- public boolean callActivity(Class<?> cls) throws Exception {
+ public boolean failed() {
+ return mResult != RESULT_TEST_SUCCESS && mResult != RESULT_TEST_IGNORED;
+ }
+
+ public void callActivity(Class<?> cls) throws Exception {
Thread thread = new Thread() {
@Override
public void run() {
@@ -65,10 +73,5 @@
};
thread.start();
thread.join(50000 /* millis */);
-
- if (mResult == RESULT_OK) {
- throw new Exception();
- }
- return (mResult - RESULT_FIRST_USER) == 1;
}
}
diff --git a/hostsidetests/tagging/src/com/android/cts/tagging/TaggingSdk30Test.java b/hostsidetests/tagging/src/com/android/cts/tagging/TaggingSdk30Test.java
index b6510d7..2c3bec0 100644
--- a/hostsidetests/tagging/src/com/android/cts/tagging/TaggingSdk30Test.java
+++ b/hostsidetests/tagging/src/com/android/cts/tagging/TaggingSdk30Test.java
@@ -146,12 +146,16 @@
}
public void testHeapZeroInitActivity() throws Exception {
+ // Note, only Scudo supports heap zero initialization. This test is
+ // effectively a no-op on jemalloc devices.
runDeviceCompatTest(TEST_PKG, ".TaggingTest", "testHeapZeroInitActivity",
/*enabledChanges*/ ImmutableSet.of(),
/*disabledChanges*/ ImmutableSet.of());
}
public void testHeapZeroInitMemtagAsyncActivity() throws Exception {
+ // Note, only Scudo supports heap zero initialization. This test is
+ // effectively a no-op on jemalloc devices.
runDeviceCompatTest(TEST_PKG, ".TaggingTest", "testHeapZeroInitMemtagAsyncActivity",
/*enabledChanges*/ ImmutableSet.of(),
/*disabledChanges*/ ImmutableSet.of());