[RESTRICT AUTOMERGE] Updated AdbUtils to get more control of crash parser behavior
Bug: 23247055
Bug: 135640247
Test: Build
Change-Id: Icfffbf75cb7747c2c6273bd0380a339ed88df24a
(cherry picked from commit 8802591a50a025f3c622b77a84a8ca6920eed9a3)
diff --git a/hostsidetests/securitybulletin/securityPatch/includes/common.h b/hostsidetests/securitybulletin/securityPatch/includes/common.h
index bc93c1e..7082b07 100644
--- a/hostsidetests/securitybulletin/securityPatch/includes/common.h
+++ b/hostsidetests/securitybulletin/securityPatch/includes/common.h
@@ -36,11 +36,11 @@
time_t start_timer(void);
int timer_active(time_t timer_started);
-time_t start_timer(){
+inline time_t start_timer(){
return time(NULL);
}
-int timer_active(time_t timer_started){
+inline int timer_active(time_t timer_started){
return time(NULL) < (timer_started + MAX_TEST_DURATION);
}
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/AdbUtils.java b/hostsidetests/securitybulletin/src/android/security/cts/AdbUtils.java
index c780ab0..85b0888 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/AdbUtils.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/AdbUtils.java
@@ -41,6 +41,7 @@
import java.util.Arrays;
import java.util.ArrayList;
import java.util.concurrent.Callable;
+import java.util.Collections;
import org.json.JSONArray;
import org.json.JSONException;
@@ -57,6 +58,20 @@
final static int TIMEOUT_SEC = 9 * 60;
final static String RESOURCE_ROOT = "/";
+ public static class pocConfig {
+ String binaryName;
+ String arguments;
+ String inputFilesDestination;
+ ITestDevice device;
+ CrashUtils.Config config;
+ List<String> inputFiles = Collections.emptyList();
+
+ pocConfig(String binaryName, ITestDevice device) {
+ this.binaryName = binaryName;
+ this.device = device;
+ }
+ }
+
/** Runs a commandline on the specified device
*
* @param command the command to be ran
@@ -282,10 +297,12 @@
*/
public static void pushResources(String[] inputFiles, String inputFilesDestination,
ITestDevice device) throws Exception {
- if ( (inputFiles != null) && (inputFilesDestination != null)) {
- for (String tempFile : inputFiles) {
- pushResource(RESOURCE_ROOT + tempFile, inputFilesDestination + tempFile, device);
- }
+ if (inputFiles == null || inputFilesDestination == null) {
+ throw new IllegalArgumentException(
+ "Can't push resources: input files or destination is null");
+ }
+ for (String tempFile : inputFiles) {
+ pushResource(RESOURCE_ROOT + tempFile, inputFilesDestination + tempFile, device);
}
}
@@ -299,10 +316,12 @@
*/
public static void removeResources(String[] inputFiles, String inputFilesDestination,
ITestDevice device) throws Exception {
- if ( (inputFiles != null) && (inputFilesDestination != null)) {
- for (String tempFile : inputFiles) {
- runCommandLine("rm " + inputFilesDestination + tempFile, device);
- }
+ if (inputFiles == null || inputFilesDestination == null) {
+ throw new IllegalArgumentException(
+ "Can't remove resources: input files or destination is null");
+ }
+ for (String tempFile : inputFiles) {
+ runCommandLine("rm " + inputFilesDestination + tempFile, device);
}
}
@@ -556,10 +575,45 @@
public static void runPocAssertNoCrashesNotVulnerable(String binaryName, String arguments,
String inputFiles[], String inputFilesDestination, ITestDevice device,
String processPatternStrings[]) throws Exception {
- pushResources(inputFiles, inputFilesDestination, device);
- runCommandLine("logcat -c", device);
+ pocConfig testConfig = new pocConfig(binaryName, device);
+ testConfig.arguments = arguments;
+
+ if (inputFiles != null) {
+ testConfig.inputFiles = Arrays.asList(inputFiles);
+ testConfig.inputFilesDestination = inputFilesDestination;
+ }
+
+ List<String> processPatternList = new ArrayList<>();
+ if (processPatternStrings != null) {
+ processPatternList.addAll(Arrays.asList(processPatternStrings));
+ }
+ processPatternList.add(binaryName);
+ String[] processPatternStringsWithSelf = new String[processPatternList.size()];
+ processPatternList.toArray(processPatternStringsWithSelf);
+ testConfig.config =
+ new CrashUtils.Config().setProcessPatterns(processPatternStringsWithSelf);
+
+ runPocAssertNoCrashesNotVulnerable(testConfig);
+ }
+
+ /**
+ * Runs the poc binary and asserts following 3 conditions.
+ * 1. There are no security crashes in the binary.
+ * 2. There are no security crashes that match the expected process pattern.
+ * 3. The exit status isn't 113 (Code 113 is used to indicate the vulnerability condition).
+ *
+ * @param testConfig test configuration
+ */
+ public static void runPocAssertNoCrashesNotVulnerable(pocConfig testConfig) throws Exception {
+ String[] inputFiles = null;
+ if(!testConfig.inputFiles.isEmpty()) {
+ inputFiles = testConfig.inputFiles.toArray(new String[testConfig.inputFiles.size()]);
+ pushResources(inputFiles, testConfig.inputFilesDestination, testConfig.device);
+ }
+ runCommandLine("logcat -c", testConfig.device);
try {
- runPocAssertExitStatusNotVulnerable(binaryName, arguments, device, TIMEOUT_SEC);
+ runPocAssertExitStatusNotVulnerable(testConfig.binaryName, testConfig.arguments,
+ testConfig.device, TIMEOUT_SEC);
} catch (IllegalArgumentException e) {
/*
* Since 'runPocGetExitStatus' method raises IllegalArgumentException upon
@@ -569,16 +623,14 @@
*/
CLog.w("Ignoring IllegalArgumentException: " + e);
} finally {
- removeResources(inputFiles, inputFilesDestination, device);
+ if (!testConfig.inputFiles.isEmpty()) {
+ removeResources(inputFiles, testConfig.inputFilesDestination, testConfig.device);
+ }
}
- List<String> processPatternList = new ArrayList<>();
- if (processPatternStrings != null) {
- processPatternList.addAll(Arrays.asList(processPatternStrings));
+ if (testConfig.config == null) {
+ testConfig.config = new CrashUtils.Config();
}
- processPatternList.add(binaryName);
- String[] processPatternStringsWithSelf = new String[processPatternList.size()];
- processPatternList.toArray(processPatternStringsWithSelf);
- assertNoCrashes(device, processPatternStringsWithSelf);
+ assertNoCrashes(testConfig.device, testConfig.config);
}
/**
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/TestMedia.java b/hostsidetests/securitybulletin/src/android/security/cts/TestMedia.java
index 6d9a12d..0524638 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/TestMedia.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/TestMedia.java
@@ -18,6 +18,7 @@
import com.android.tradefed.device.ITestDevice;
import com.android.tradefed.log.LogUtil.CLog;
+import com.android.compatibility.common.util.CrashUtils;
import android.platform.test.annotations.SecurityTest;
import org.junit.Test;
@@ -26,6 +27,8 @@
import static org.junit.Assert.*;
import junit.framework.Assert;
+import java.util.Arrays;
+import java.util.ArrayList;
@RunWith(DeviceJUnit4ClassRunner.class)
public class TestMedia extends SecurityTestCase {