summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Buynytskyy <alexbuy@google.com> 2020-06-08 15:12:25 -0700
committer Alex Buynytskyy <alexbuy@google.com> 2020-06-12 09:31:34 -0700
commit6e3c563f071eb57a05981d40808c820d347c20f1 (patch)
tree07514d03d16a63807c3d58e56962c5d663114372
parent8cf7a51d3d8c1fc1b356c8fd5c5706de7f2bc8ad (diff)
Internal version of isChangeEnabled.
Do not check permissions when called from within system server. It's up to PM to make sure it's doing the right thing. Bug: 157191740 Test: adb reboot; adb logcat | grep "Finished scanning system apps" Change-Id: Icde2a3d62f7eacfbeb33e102f74d1f2ca06a4439
-rw-r--r--services/core/java/com/android/server/compat/PlatformCompat.java7
-rw-r--r--services/core/java/com/android/server/pm/AppsFilter.java22
-rw-r--r--services/core/java/com/android/server/pm/SELinuxMMAC.java3
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/SELinuxMMACTest.java6
4 files changed, 19 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/compat/PlatformCompat.java b/services/core/java/com/android/server/compat/PlatformCompat.java
index 8ed864c71625..d7e9499cf8db 100644
--- a/services/core/java/com/android/server/compat/PlatformCompat.java
+++ b/services/core/java/com/android/server/compat/PlatformCompat.java
@@ -102,6 +102,13 @@ public class PlatformCompat extends IPlatformCompat.Stub {
@Override
public boolean isChangeEnabled(long changeId, ApplicationInfo appInfo) {
checkCompatChangeReadAndLogPermission();
+ return isChangeEnabledInternal(changeId, appInfo);
+ }
+
+ /**
+ * Internal version of the above method. Does not perform costly permission check.
+ */
+ public boolean isChangeEnabledInternal(long changeId, ApplicationInfo appInfo) {
if (mCompatConfig.isChangeEnabled(changeId, appInfo)) {
reportChange(changeId, appInfo.uid,
ChangeReporter.STATE_ENABLED);
diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java
index 4b6ee71803a7..5b9db64dd9b1 100644
--- a/services/core/java/com/android/server/pm/AppsFilter.java
+++ b/services/core/java/com/android/server/pm/AppsFilter.java
@@ -32,7 +32,6 @@ import android.content.pm.parsing.component.ParsedInstrumentation;
import android.content.pm.parsing.component.ParsedIntentInfo;
import android.content.pm.parsing.component.ParsedMainComponent;
import android.content.pm.parsing.component.ParsedProvider;
-import android.os.Binder;
import android.os.Process;
import android.os.Trace;
import android.os.UserHandle;
@@ -239,20 +238,13 @@ public class AppsFilter {
}
private void updateEnabledState(AndroidPackage pkg) {
- final long token = Binder.clearCallingIdentity();
- try {
- // TODO(b/135203078): Do not use toAppInfo
- final boolean enabled =
- mInjector.getCompatibility().isChangeEnabled(
- PackageManager.FILTER_APPLICATION_QUERY,
- pkg.toAppInfoWithoutState());
- if (enabled) {
- mDisabledPackages.remove(pkg.getPackageName());
- } else {
- mDisabledPackages.add(pkg.getPackageName());
- }
- } finally {
- Binder.restoreCallingIdentity(token);
+ // TODO(b/135203078): Do not use toAppInfo
+ final boolean enabled = mInjector.getCompatibility().isChangeEnabledInternal(
+ PackageManager.FILTER_APPLICATION_QUERY, pkg.toAppInfoWithoutState());
+ if (enabled) {
+ mDisabledPackages.remove(pkg.getPackageName());
+ } else {
+ mDisabledPackages.add(pkg.getPackageName());
}
}
diff --git a/services/core/java/com/android/server/pm/SELinuxMMAC.java b/services/core/java/com/android/server/pm/SELinuxMMAC.java
index 67e1994eac9a..fdd9636ae7b2 100644
--- a/services/core/java/com/android/server/pm/SELinuxMMAC.java
+++ b/services/core/java/com/android/server/pm/SELinuxMMAC.java
@@ -349,7 +349,8 @@ public final class SELinuxMMAC {
if ((sharedUserSetting != null) && (sharedUserSetting.packages.size() != 0)) {
return sharedUserSetting.seInfoTargetSdkVersion;
}
- if (compatibility.isChangeEnabled(SELINUX_LATEST_CHANGES, pkg.toAppInfoWithoutState())) {
+ if (compatibility.isChangeEnabledInternal(SELINUX_LATEST_CHANGES,
+ pkg.toAppInfoWithoutState())) {
return android.os.Build.VERSION_CODES.R;
}
diff --git a/services/tests/servicestests/src/com/android/server/pm/SELinuxMMACTest.java b/services/tests/servicestests/src/com/android/server/pm/SELinuxMMACTest.java
index efc1c057d8f4..a550b27a62a2 100644
--- a/services/tests/servicestests/src/com/android/server/pm/SELinuxMMACTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/SELinuxMMACTest.java
@@ -52,7 +52,7 @@ public class SELinuxMMACTest {
@Test
public void getSeInfoOptInToLatest() {
AndroidPackage pkg = makePackage(Build.VERSION_CODES.P);
- when(mMockCompatibility.isChangeEnabled(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES),
+ when(mMockCompatibility.isChangeEnabledInternal(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES),
argThat(argument -> argument.packageName.equals(pkg.getPackageName()))))
.thenReturn(true);
assertThat(SELinuxMMAC.getSeInfo(pkg, null, mMockCompatibility),
@@ -62,7 +62,7 @@ public class SELinuxMMACTest {
@Test
public void getSeInfoNoOptIn() {
AndroidPackage pkg = makePackage(Build.VERSION_CODES.P);
- when(mMockCompatibility.isChangeEnabled(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES),
+ when(mMockCompatibility.isChangeEnabledInternal(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES),
argThat(argument -> argument.packageName.equals(pkg.getPackageName()))))
.thenReturn(false);
assertThat(SELinuxMMAC.getSeInfo(pkg, null, mMockCompatibility),
@@ -72,7 +72,7 @@ public class SELinuxMMACTest {
@Test
public void getSeInfoNoOptInButAlreadyR() {
AndroidPackage pkg = makePackage(OPT_IN_VERSION);
- when(mMockCompatibility.isChangeEnabled(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES),
+ when(mMockCompatibility.isChangeEnabledInternal(eq(SELinuxMMAC.SELINUX_LATEST_CHANGES),
argThat(argument -> argument.packageName.equals(pkg.getPackageName()))))
.thenReturn(false);
assertThat(SELinuxMMAC.getSeInfo(pkg, null, mMockCompatibility),