[RESTRICT AUTOMERGE] Updated CTS test for Android Security b/150159669
Bug: 150159669
Bug: 160693070
Bug: 185090843
Bug: 207035735
Test: Ran the new testcase on android-10.0.0_r2 to test with/without patch
Change-Id: I9d1f68004487bb138fa268a7776e35f517d9c370
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2020-0381/Android.bp b/hostsidetests/securitybulletin/securityPatch/CVE-2020-0381/Android.bp
index a427420..06a5d5c 100644
--- a/hostsidetests/securitybulletin/securityPatch/CVE-2020-0381/Android.bp
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2020-0381/Android.bp
@@ -15,6 +15,10 @@
*
*/
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
cc_test {
name: "CVE-2020-0381",
defaults: ["cts_hostsidetests_securitybulletin_defaults"],
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2020-0381/poc.cpp b/hostsidetests/securitybulletin/securityPatch/CVE-2020-0381/poc.cpp
index f704984..be875f1 100644
--- a/hostsidetests/securitybulletin/securityPatch/CVE-2020-0381/poc.cpp
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2020-0381/poc.cpp
@@ -16,9 +16,6 @@
#include <dlfcn.h>
#include <media/IMediaExtractor.h>
-#include <signal.h>
-#include <stdlib.h>
-
#include "../includes/common.h"
#include "../includes/memutils.h"
@@ -34,6 +31,22 @@
using namespace android;
+bool isTestInProgress = false;
+
+struct sigaction new_action, old_action;
+
+int fdData, fdInfo;
+
+void *libHandle = nullptr;
+
+void sigsegv_handler(int signum, siginfo_t *info, void *context) {
+ if (isTestInProgress && info->si_signo == SIGSEGV) {
+ (*old_action.sa_sigaction)(signum, info, context);
+ return;
+ }
+ _exit(EXIT_FAILURE);
+}
+
class XMFDataSource : public DataSource {
public:
int mFdData;
@@ -61,7 +74,7 @@
virtual status_t initCheck() const { return 0; }
};
-void close_resources(int fdData, int fdInfo, void *libHandle) {
+void close_resources() {
if (fdData >= 0) {
::close(fdData);
}
@@ -74,44 +87,37 @@
}
int main(int argc, char **argv) {
- if (argc < 3) {
- return EXIT_FAILURE;
- }
- enable_selective_overload = ENABLE_ALL;
- void *libHandle = dlopen(LIBNAME, RTLD_NOW | RTLD_LOCAL);
+ atexit(close_resources);
+
+ sigemptyset(&new_action.sa_mask);
+ new_action.sa_flags = SA_SIGINFO;
+ new_action.sa_sigaction = sigsegv_handler;
+ sigaction(SIGSEGV, &new_action, &old_action);
+
+ FAIL_CHECK(argc == 3);
+ libHandle = dlopen(LIBNAME, RTLD_NOW | RTLD_LOCAL);
if (!libHandle) {
libHandle = dlopen(LIBNAME_APEX, RTLD_NOW | RTLD_LOCAL);
- if (!libHandle) {
- return EXIT_FAILURE;
- }
+ FAIL_CHECK(libHandle);
}
GetExtractorDef getDef = (GetExtractorDef)dlsym(libHandle, "GETEXTRACTORDEF");
- if (!getDef) {
- dlclose(libHandle);
- return EXIT_FAILURE;
- }
+ FAIL_CHECK(getDef);
- int fdData = open(argv[1], O_RDONLY);
- if (fdData < 0) {
- dlclose(libHandle);
- return EXIT_FAILURE;
- }
- int fdInfo = open(argv[2], O_RDONLY);
- if (fdInfo < 0) {
- close_resources(fdData, fdInfo, libHandle);
- return EXIT_FAILURE;
- }
+ fdData = open(argv[1], O_RDONLY);
+ FAIL_CHECK(fdData >= 0);
+
+ fdInfo = open(argv[2], O_RDONLY);
+ FAIL_CHECK(fdInfo >= 0);
sp<DataSource> dataSource = (sp<DataSource>)new XMFDataSource(fdData, fdInfo);
- if (!dataSource) {
- close_resources(fdData, fdInfo, libHandle);
- return EXIT_FAILURE;
- }
+ FAIL_CHECK(dataSource);
+
+ enable_selective_overload = ENABLE_ALL;
+ isTestInProgress = true;
void *meta = nullptr;
FreeMetaFunc freeMeta = nullptr;
-
float confidence = 0.0f;
if (getDef().def_version == EXTRACTORDEF_VERSION_NDK_V1) {
getDef().u.v2.sniff(dataSource->wrap(), &confidence, &meta, &freeMeta);
@@ -119,7 +125,7 @@
getDef().u.v3.sniff(dataSource->wrap(), &confidence, &meta, &freeMeta);
}
- close_resources(fdData, fdInfo, libHandle);
- enable_selective_overload = ENABLE_NONE;
+ isTestInProgress = false;
+ enable_selective_overload = ENABLE_FREE_CHECK | ENABLE_REALLOC_CHECK;
return EXIT_SUCCESS;
}
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/CVE_2020_0381.java b/hostsidetests/securitybulletin/src/android/security/cts/CVE_2020_0381.java
index 695d8dc..12edb1a 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/CVE_2020_0381.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/CVE_2020_0381.java
@@ -16,13 +16,19 @@
package android.security.cts;
+import static org.junit.Assume.assumeFalse;
+
import android.platform.test.annotations.AsbSecurityTest;
+
import org.junit.Test;
import org.junit.runner.RunWith;
-import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
-import com.android.tradefed.device.ITestDevice;
-import static org.junit.Assume.*;
+import com.android.compatibility.common.util.CrashUtils;
+import com.android.compatibility.common.util.CrashUtils.Config.BacktraceFilterPattern;
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+
+import java.util.Arrays;
+import java.util.regex.Pattern;
@RunWith(DeviceJUnit4ClassRunner.class)
public class CVE_2020_0381 extends SecurityTestCase {
@@ -31,13 +37,21 @@
* b/150159669
* Vulnerability Behaviour: SIGSEGV in self
*/
- @Test
@AsbSecurityTest(cveBugId = 150159669)
+ @Test
public void testPocCVE_2020_0381() throws Exception {
assumeFalse(moduleIsPlayManaged("com.google.android.media"));
+ String binaryName = "CVE-2020-0381";
String inputFiles[] = {"cve_2020_0381.xmf", "cve_2020_0381.info"};
- AdbUtils.runPocAssertNoCrashesNotVulnerable("CVE-2020-0381",
- AdbUtils.TMP_PATH + inputFiles[0] + " " + AdbUtils.TMP_PATH + inputFiles[1],
- inputFiles, AdbUtils.TMP_PATH, getDevice());
+ String signals[] = {CrashUtils.SIGSEGV};
+ AdbUtils.pocConfig testConfig = new AdbUtils.pocConfig(binaryName, getDevice());
+ testConfig.config = new CrashUtils.Config().setProcessPatterns(Pattern.compile(binaryName))
+ .setBacktraceIncludes(new BacktraceFilterPattern("libmidiextractor", "Parse_ptbl"));
+ testConfig.config.setSignals(signals);
+ testConfig.arguments =
+ AdbUtils.TMP_PATH + inputFiles[0] + " " + AdbUtils.TMP_PATH + inputFiles[1];
+ testConfig.inputFiles = Arrays.asList(inputFiles);
+ testConfig.inputFilesDestination = AdbUtils.TMP_PATH;
+ AdbUtils.runPocAssertNoCrashesNotVulnerable(testConfig);
}
}