isSimPortAvailable should clear calling identity before call TM APIs
Bug: 209060082
Test: Manual
Change-Id: I5124890e0aaefed88b6450f1ba9d0365dc77541c
diff --git a/src/java/com/android/internal/telephony/euicc/EuiccController.java b/src/java/com/android/internal/telephony/euicc/EuiccController.java
index 39697a1..843798f 100644
--- a/src/java/com/android/internal/telephony/euicc/EuiccController.java
+++ b/src/java/com/android/internal/telephony/euicc/EuiccController.java
@@ -1627,13 +1627,19 @@
Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS)
== PackageManager.PERMISSION_GRANTED;
}
+
@Override
public boolean isSimPortAvailable(int cardId, int portIndex, String callingPackage) {
- List<UiccCardInfo> cardInfos = mTelephonyManager.getUiccCardsInfo();
+ List<UiccCardInfo> cardInfos;
+ final long token = Binder.clearCallingIdentity();
+ try {
+ cardInfos = mTelephonyManager.getUiccCardsInfo();
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
if (ArrayUtils.isEmpty(cardInfos)) {
return false;
}
- int result = TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
for (UiccCardInfo info : cardInfos) {
//return false if physical card
if (info != null && info.getCardId() == cardId && (!info.isEuicc()
@@ -1645,9 +1651,9 @@
if (port == null) {
return false;
}
- // port is available if port is inactive and ICCID or calling app has carrier
+ // port is available if port is inactive and ICCID or calling app has carrier
// privilege over the profile installed on the selected port.
- result = port.getUiccProfile().getCarrierPrivilegeStatus(
+ int result = port.getUiccProfile().getCarrierPrivilegeStatus(
mContext.getPackageManager(), callingPackage);
if ((result == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS)
|| (portInfo.getIccId() == null && portInfo.isActive())) {