From d94c786a550ec761f836bcf6b5a0a46d3682e1d7 Mon Sep 17 00:00:00 2001 From: Chinmay Dhodapkar Date: Wed, 16 Mar 2022 18:18:08 -0700 Subject: [PATCH] Extend previously added limits for listeners original change (ag/10753900) did not cover all apis -added limit check to onSubscriptionsChangedListener -added limit check to addOnOpportunisticSubscriptionListener -minor refactoring to remove duplicate code -error logging to ensure that logs are printed for sys/phone uids Bug: 222188265 Test: atest TelephonyRegistryTest Merged-In: Ie231d7d2bc217bf1d373f8447f5f2f672c8ab908 Change-Id: Ie231d7d2bc217bf1d373f8447f5f2f672c8ab908 (cherry picked from commit 1b5369b5fb3e42713341d335fe1ffb2d3ed9b27a) --- .../com/android/server/TelephonyRegistry.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index 7cc24fa5ea496..2652ebec52553 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -873,6 +873,13 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { mContext.registerReceiver(mBroadcastReceiver, filter); } + //helper function to determine if limit on num listeners applies to callingUid + private boolean doesLimitApplyForListeners(int callingUid, int exemptUid) { + return (callingUid != Process.SYSTEM_UID + && callingUid != Process.PHONE_UID + && callingUid != exemptUid); + } + @Override public void addOnSubscriptionsChangedListener(String callingPackage, String callingFeatureId, IOnSubscriptionsChangedListener callback) { @@ -887,7 +894,9 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { synchronized (mRecords) { // register IBinder b = callback.asBinder(); - Record r = add(b, Binder.getCallingUid(), Binder.getCallingPid(), false); + boolean doesLimitApply = doesLimitApplyForListeners(Binder.getCallingUid(), + Process.myUid()); + Record r = add(b, Binder.getCallingUid(), Binder.getCallingPid(), doesLimitApply); // if (r == null) { return; @@ -941,7 +950,9 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { synchronized (mRecords) { // register IBinder b = callback.asBinder(); - Record r = add(b, Binder.getCallingUid(), Binder.getCallingPid(), false); + boolean doesLimitApply = doesLimitApplyForListeners(Binder.getCallingUid(), + Process.myUid()); + Record r = add(b, Binder.getCallingUid(), Binder.getCallingPid(), doesLimitApply); // if (r == null) { return; @@ -1070,10 +1081,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { synchronized (mRecords) { // register IBinder b = callback.asBinder(); - boolean doesLimitApply = - Binder.getCallingUid() != Process.SYSTEM_UID - && Binder.getCallingUid() != Process.PHONE_UID - && Binder.getCallingUid() != Process.myUid(); + boolean doesLimitApply = doesLimitApplyForListeners(Binder.getCallingUid(), + Process.myUid()); Record r = add(b, Binder.getCallingUid(), Binder.getCallingPid(), doesLimitApply); if (r == null) { @@ -1417,7 +1426,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { .isRegistrationLimitEnabledInPlatformCompat(callingUid)) { throw new IllegalStateException(errorMsg); } - } else if (doesLimitApply && numRecordsForPid + } else if (numRecordsForPid >= TelephonyCallback.DEFAULT_PER_PID_REGISTRATION_LIMIT / 2) { // Log the warning independently of the dynamically set limit -- apps shouldn't be // doing this regardless of whether we're throwing them an exception for it.