From 6908307ec4a0d7df5f292d9ca1593848bb1459f9 Mon Sep 17 00:00:00 2001 From: Evan Severson Date: Wed, 30 Mar 2022 17:04:33 -0700 Subject: Skip permission check for system ui. This is a workaround for a race condition between system ui and role service's role based grants on boot. The config value used is the same that the role service uses to give system ui its role. Test: Verify check is bypassed Bug: 221782106 Change-Id: Ia44abeefbec1b27df6bf802d7493c03381518e96 --- .../com/android/server/sensorprivacy/SensorPrivacyService.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java b/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java index 2f68f56a7de0..bce1cce0f47f 100644 --- a/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java +++ b/services/core/java/com/android/server/sensorprivacy/SensorPrivacyService.java @@ -29,6 +29,7 @@ import static android.app.AppOpsManager.OP_RECORD_AUDIO; import static android.content.Intent.EXTRA_PACKAGE_NAME; import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; import static android.content.Intent.FLAG_ACTIVITY_NO_USER_ACTION; +import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.hardware.SensorPrivacyManager.EXTRA_ALL_SENSORS; import static android.hardware.SensorPrivacyManager.EXTRA_SENSOR; @@ -77,6 +78,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; +import android.content.pm.PackageManagerInternal; import android.content.res.Configuration; import android.graphics.drawable.Icon; import android.hardware.ISensorPrivacyListener; @@ -155,6 +157,7 @@ public final class SensorPrivacyService extends SystemService { private final AppOpsManager mAppOpsManager; private final AppOpsManagerInternal mAppOpsManagerInternal; private final TelephonyManager mTelephonyManager; + private final PackageManagerInternal mPackageManagerInternal; private CameraPrivacyLightController mCameraPrivacyLightController; @@ -178,6 +181,7 @@ public final class SensorPrivacyService extends SystemService { mActivityManagerInternal = getLocalService(ActivityManagerInternal.class); mActivityTaskManager = context.getSystemService(ActivityTaskManager.class); mTelephonyManager = context.getSystemService(TelephonyManager.class); + mPackageManagerInternal = getLocalService(PackageManagerInternal.class); mSensorPrivacyServiceImpl = new SensorPrivacyServiceImpl(); } @@ -828,6 +832,12 @@ public final class SensorPrivacyService extends SystemService { * sensor privacy. */ private void enforceObserveSensorPrivacyPermission() { + String systemUIPackage = mContext.getString(R.string.config_systemUi); + if (Binder.getCallingUid() == mPackageManagerInternal + .getPackageUid(systemUIPackage, MATCH_SYSTEM_ONLY, UserHandle.USER_SYSTEM)) { + // b/221782106, possible race condition with role grant might bootloop device. + return; + } enforcePermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY, "Observing sensor privacy changes requires the following permission: " + android.Manifest.permission.OBSERVE_SENSOR_PRIVACY); -- cgit v1.2.3-59-g8ed1b