OSDN Git Service

Cache the build serial instead of querying every time.
authorAmith Yamasani <yamasani@google.com>
Tue, 18 Jul 2017 23:14:26 +0000 (16:14 -0700)
committerAmith Yamasani <yamasani@google.com>
Tue, 18 Jul 2017 23:20:53 +0000 (16:20 -0700)
Also only return the original serial number if the
targetSandboxVersion is less than 2, not just != 2.

Change-Id: Ie17666798922bdac10a79bbc00934b311b816818
Fixes: 63808327
Test: run cts-dev -m CtsAppSecurityHostTestCases -t
android.appsecurity.cts.EphemeralTest#testBuildSerialUnknown

services/core/java/com/android/server/am/ActivityManagerService.java

index 97be508..9e0a645 100644 (file)
@@ -1732,6 +1732,8 @@ public class ActivityManagerService extends IActivityManager.Stub
 
     final boolean mPermissionReviewRequired;
 
+    private static String sTheRealBuildSerial = Build.UNKNOWN;
+
     /**
      * Current global configuration information. Contains general settings for the entire system,
      * also corresponds to the merged configuration of the default display.
@@ -6990,12 +6992,8 @@ public class ActivityManagerService extends IActivityManager.Stub
             // We deprecated Build.SERIAL and it is not accessible to
             // apps that target the v2 security sandbox. Since access to
             // the serial is now behind a permission we push down the value.
-            String buildSerial = Build.UNKNOWN;
-            if (appInfo.targetSandboxVersion != 2) {
-                buildSerial = IDeviceIdentifiersPolicyService.Stub.asInterface(
-                        ServiceManager.getService(Context.DEVICE_IDENTIFIERS_SERVICE))
-                        .getSerial();
-            }
+            String buildSerial = appInfo.targetSandboxVersion < 2
+                    ? sTheRealBuildSerial : Build.UNKNOWN;
 
             // Check if this is a secondary process that should be incorporated into some
             // currently active instrumentation.  (Note we do this AFTER all of the profiling
@@ -14118,6 +14116,12 @@ public class ActivityManagerService extends IActivityManager.Stub
             mSystemReady = true;
         }
 
+        try {
+            sTheRealBuildSerial = IDeviceIdentifiersPolicyService.Stub.asInterface(
+                    ServiceManager.getService(Context.DEVICE_IDENTIFIERS_SERVICE))
+                    .getSerial();
+        } catch (RemoteException e) {}
+
         ArrayList<ProcessRecord> procsToKill = null;
         synchronized(mPidsSelfLocked) {
             for (int i=mPidsSelfLocked.size()-1; i>=0; i--) {