summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gavin Corkery <gavincorkery@google.com> 2022-05-14 21:26:53 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-05-14 21:26:53 +0000
commitc110d9ff71723b647d9b9ae31b53e1014a2ed207 (patch)
tree40bbfddd6f80da223ac269edf5f33add2cdbc87d
parent065c279cb6a79ff0953f986d58f2687eb32a90e7 (diff)
parentc7c60d5ec18d399520a942cb678a06423921dacf (diff)
Merge "Add DeviceConfig flag for enforcing receiver restrictions" into tm-dev am: c7c60d5ec1
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18356870 Change-Id: I60c662cef850287bdc0e9778f553db9f723788c8 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java54
1 files changed, 53 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index f6e8bc826153..aa510e7717eb 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -1530,6 +1530,8 @@ public class ActivityManagerService extends IActivityManager.Stub
// Encapsulates the global setting "hidden_api_blacklist_exemptions"
final HiddenApiSettings mHiddenApiBlacklist;
+ final SdkSandboxSettings mSdkSandboxSettings;
+
private final PlatformCompat mPlatformCompat;
PackageManagerInternal mPackageManagerInt;
@@ -2235,6 +2237,53 @@ public class ActivityManagerService extends IActivityManager.Stub
}
}
+ /**
+ * Handles settings related to the enforcement of SDK sandbox restrictions.
+ */
+ static class SdkSandboxSettings implements DeviceConfig.OnPropertiesChangedListener {
+
+ private final Context mContext;
+ private final Object mLock = new Object();
+
+ @GuardedBy("mLock")
+ private boolean mEnforceBroadcastReceiverRestrictions;
+
+ /**
+ * Property to enforce broadcast receiver restrictions for SDK sandbox processes. If the
+ * value of this property is {@code true}, the restrictions will be enforced.
+ */
+ public static final String ENFORCE_BROADCAST_RECEIVER_RESTRICTIONS =
+ "enforce_broadcast_receiver_restrictions";
+
+ SdkSandboxSettings(Context context) {
+ mContext = context;
+ }
+
+ void registerObserver() {
+ synchronized (mLock) {
+ mEnforceBroadcastReceiverRestrictions = DeviceConfig.getBoolean(
+ DeviceConfig.NAMESPACE_SDK_SANDBOX,
+ ENFORCE_BROADCAST_RECEIVER_RESTRICTIONS, false);
+ DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SDK_SANDBOX,
+ mContext.getMainExecutor(), this);
+ }
+ }
+
+ @Override
+ public void onPropertiesChanged(DeviceConfig.Properties properties) {
+ synchronized (mLock) {
+ mEnforceBroadcastReceiverRestrictions = properties.getBoolean(
+ ENFORCE_BROADCAST_RECEIVER_RESTRICTIONS, false);
+ }
+ }
+
+ boolean isBroadcastReceiverRestrictionsEnforced() {
+ synchronized (mLock) {
+ return mEnforceBroadcastReceiverRestrictions;
+ }
+ }
+ }
+
AppOpsManager getAppOpsManager() {
if (mAppOpsManager == null) {
mAppOpsManager = mContext.getSystemService(AppOpsManager.class);
@@ -2287,6 +2336,7 @@ public class ActivityManagerService extends IActivityManager.Stub
mProcStartHandlerThread = null;
mProcStartHandler = null;
mHiddenApiBlacklist = null;
+ mSdkSandboxSettings = null;
mFactoryTest = FACTORY_TEST_OFF;
mUgmInternal = LocalServices.getService(UriGrantsManagerInternal.class);
mInternal = new LocalService();
@@ -2406,6 +2456,7 @@ public class ActivityManagerService extends IActivityManager.Stub
mAtmInternal = LocalServices.getService(ActivityTaskManagerInternal.class);
mHiddenApiBlacklist = new HiddenApiSettings(mHandler, mContext);
+ mSdkSandboxSettings = new SdkSandboxSettings(mContext);
Watchdog.getInstance().addMonitor(this);
Watchdog.getInstance().addThread(mHandler);
@@ -7911,6 +7962,7 @@ public class ActivityManagerService extends IActivityManager.Stub
final boolean alwaysFinishActivities =
Settings.Global.getInt(resolver, ALWAYS_FINISH_ACTIVITIES, 0) != 0;
mHiddenApiBlacklist.registerObserver();
+ mSdkSandboxSettings.registerObserver();
mPlatformCompat.registerContentObserver();
mAppProfiler.retrieveSettings();
@@ -12940,7 +12992,7 @@ public class ActivityManagerService extends IActivityManager.Stub
// Allow Sandbox process to register only unexported receivers.
if ((flags & Context.RECEIVER_NOT_EXPORTED) != 0) {
enforceNotIsolatedCaller("registerReceiver");
- } else {
+ } else if (mSdkSandboxSettings.isBroadcastReceiverRestrictionsEnforced()) {
enforceNotIsolatedOrSdkSandboxCaller("registerReceiver");
}
ArrayList<Intent> stickyIntents = null;