Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f02c2dc5 authored by Sooraj Sasindran's avatar Sooraj Sasindran
Browse files

enforce permission check for getActiveSubIdList

Bug: 188553890
Test: ran unit test
Change-Id: I75e1b12b3a5ca7dbd57728b82d57460d0d26f8e3
parent 0004ee24
Loading
Loading
Loading
Loading
+23 −16
Original line number Diff line number Diff line
@@ -3054,6 +3054,10 @@ public class SubscriptionController extends ISub.Stub {
     */
    @Override
    public int[] getActiveSubIdList(boolean visibleOnly) {
        enforceReadPrivilegedPhoneState("getActiveSubIdList");

        final long token = Binder.clearCallingIdentity();
        try {
            List<Integer> allSubs = getActiveSubIdArrayList();

            if (visibleOnly) {
@@ -3074,6 +3078,9 @@ public class SubscriptionController extends ISub.Stub {
                        + subIdArr.length);
            }
            return subIdArr;
        } finally {
            Binder.restoreCallingIdentity(token);
        }
    }

    @Override
+8 −0
Original line number Diff line number Diff line
@@ -852,6 +852,14 @@ public class ContextFixture implements TestFixture<Context> {
        }
    }

    public void addCallingOrSelfPermissionToCurrentPermissions(String permission) {
        synchronized (mPermissionTable) {
            if (mPermissionTable != null && permission != null) {
                mPermissionTable.add(permission);
            }
        }
    }

    public void removeCallingOrSelfPermission(String permission) {
        synchronized (mPermissionTable) {
            if (mPermissionTable != null && permission != null) {
+15 −2
Original line number Diff line number Diff line
@@ -136,7 +136,6 @@ public class SubscriptionControllerTest extends TelephonyTest {
        mCarrierConfigs = mContextFixture.getCarrierConfigBundle();

        mContextFixture.putIntArrayResource(com.android.internal.R.array.sim_colors, new int[]{5});

        setupMocksForTelephonyPermissions(Build.VERSION_CODES.R);
    }

@@ -1298,8 +1297,10 @@ public class SubscriptionControllerTest extends TelephonyTest {
        // If the calling package does not have the READ_PHONE_STATE permission or carrier
        // privileges then getActiveSubscriptionInfo should throw a SecurityException;
        testInsertSim();
        mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);
        setupReadPrivilegePermission();
        int subId = getFirstSubId();
        removeReadPrivilegePermission();
        mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL);

        try {
            mSubscriptionControllerUT.getActiveSubscriptionInfo(subId, mCallingPackage,
@@ -1317,6 +1318,7 @@ public class SubscriptionControllerTest extends TelephonyTest {
        testInsertSim();
        setupReadPhoneNumbersTest();
        setIdentifierAccess(false);
        setupReadPrivilegePermission();
        int subId = getFirstSubId();

        SubscriptionInfo subscriptionInfo = mSubscriptionControllerUT.getActiveSubscriptionInfo(
@@ -1336,6 +1338,7 @@ public class SubscriptionControllerTest extends TelephonyTest {
        testInsertSim();
        setupReadPhoneNumbersTest();
        setPhoneNumberAccess(PackageManager.PERMISSION_GRANTED);
        setupReadPrivilegePermission();
        int subId = getFirstSubId();

        SubscriptionInfo subscriptionInfo = mSubscriptionControllerUT.getActiveSubscriptionInfo(
@@ -1351,6 +1354,7 @@ public class SubscriptionControllerTest extends TelephonyTest {
        // privileges the ICC ID should be available in the SubscriptionInfo.
        testInsertSim();
        setupIdentifierCarrierPrivilegesTest();
        setupReadPrivilegePermission();
        int subId = getFirstSubId();

        SubscriptionInfo subscriptionInfo = mSubscriptionControllerUT.getActiveSubscriptionInfo(
@@ -1734,6 +1738,15 @@ public class SubscriptionControllerTest extends TelephonyTest {
        setCarrierPrivileges(true);
    }

    private void setupReadPrivilegePermission() throws Exception {
        mContextFixture.addCallingOrSelfPermissionToCurrentPermissions(
                Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
    }
    private void removeReadPrivilegePermission() throws Exception {
        mContextFixture.removeCallingOrSelfPermission(
                Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
    }

    private int getFirstSubId() throws Exception {
        return getSubIdAtIndex(0);
    }