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

Commit 6fc804b3 authored by Nathan Harold's avatar Nathan Harold
Browse files

Check Carrier Privilege on Hidden Subs

When calling CheckCarrierPrivilegeForAnySubId the
hidden subscriptions were not being taken into account
due to getAllActiveSubscriptionIds being a public method
that intentionally ignores hidden subscriptions.

Bug: 135684437
Test: manual
Change-Id: I7688e4fe25fd2c6ed22dc8edc508345c1a3d447c
parent 3533116e
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -2121,24 +2121,27 @@ public class SubscriptionManager {
     * @hide
     */
    @UnsupportedAppUsage
    public @NonNull int[] getActiveSubscriptionIdList() {
        int[] subId = null;
    public static @NonNull int[] getActiveSubscriptionIdList() {
        return getActiveSubscriptionIdList(true);
    }

    /**
     * @return a non-null list of subId's that are active.
     *
     * @hide
     */
    public static @NonNull int[] getActiveSubscriptionIdList(boolean visibleOnly) {
        try {
            ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
            if (iSub != null) {
                subId = iSub.getActiveSubIdList(/*visibleOnly*/true);
                int[] subId = iSub.getActiveSubIdList(visibleOnly);
                if (subId != null) return subId;
            }
        } catch (RemoteException ex) {
            // ignore it
        }

        if (subId == null) {
            subId = new int[0];
        }

        return subId;

        return new int[0];
    }

    /**
+5 −9
Original line number Diff line number Diff line
@@ -605,17 +605,13 @@ public final class TelephonyPermissions {
     */
    private static boolean checkCarrierPrivilegeForAnySubId(Context context,
            Supplier<ITelephony> telephonySupplier, int uid) {
        SubscriptionManager sm = (SubscriptionManager) context.getSystemService(
                Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        int[] activeSubIds = sm.getActiveSubscriptionIdList();
        if (activeSubIds != null) {
        int[] activeSubIds = SubscriptionManager.getActiveSubscriptionIdList(/*visibleOnly*/ false);
        for (int activeSubId : activeSubIds) {
            if (getCarrierPrivilegeStatus(telephonySupplier, activeSubId, uid)
                    == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
                return true;
            }
        }
        }
        return false;
    }