Have proper permission check in getConfigForSubId
getConfigForSubId also needs to check permission from AppOps, but
it's not. This change fixes it. Within this commit, PhoneGlobals#
getCarrierConfigForSubId always passes its own packageName as
when calling getConfigForSubId, so further change is needed (pass
external callingPackage or clear calling identity).
Bug: 73136824
Test: regression
Change-Id: Icfefd2cc17633304a397d573a9e010385c5799c8
Merged-In: Icfefd2cc17633304a397d573a9e010385c5799c8
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index dab2177..42c9918 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -16,8 +16,6 @@
package com.android.phone;
-import static android.Manifest.permission.READ_PHONE_STATE;
-import static android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE;
import static android.service.carrier.CarrierService.ICarrierServiceWrapper.KEY_CONFIG_BUNDLE;
import static android.service.carrier.CarrierService.ICarrierServiceWrapper.RESULT_ERROR;
@@ -777,22 +775,10 @@
@Override public
@NonNull
- PersistableBundle getConfigForSubId(int subId) {
- // TODO(b/73136824): Migrate to TelephonyPermissions#checkCallingOrSelfReadPhoneState.
- try {
- mContext.enforceCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE, null);
- // SKIP checking run-time READ_PHONE_STATE since using PRIVILEGED
- } catch (SecurityException e) {
- try {
- mContext.enforceCallingOrSelfPermission(READ_PHONE_STATE, null);
- } catch (SecurityException securityException) {
- // If we don't have the runtime permission, but do have carrier privileges, that
- // suffices for reading phone state.
- if (!SubscriptionManager.isValidSubscriptionId(subId)) {
- throw securityException;
- }
- TelephonyPermissions.enforceCallingOrSelfCarrierPrivilege(subId, null);
- }
+ PersistableBundle getConfigForSubId(int subId, String callingPackage) {
+ if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(
+ mContext, subId, callingPackage, "getCarrierConfig")) {
+ return new PersistableBundle();
}
int phoneId = SubscriptionManager.getPhoneId(subId);