From 7569d5144682d48467b59693928ec10bc6f6eb80 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Thu, 3 Feb 2022 12:23:54 +0900 Subject: [PATCH] Use RECEIVER_NOT_EXPORTED in CarrierPrivilegeAuthenticator. Passing one of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED is required for all code targeting T or above. The correct value here is RECEIVER_NOT_EXPORTED because the receiver is being registered in the system server and the broadcast comes from the system server itself (same UID). This does not need to be guarded by OS version because CarrierPrivilegeAuthenticator is only used on T+. Test: m Fix: 217642082 Change-Id: I09840b17bd54352896607737b56c6a692ffbd2c2 --- .../connectivity/CarrierPrivilegeAuthenticator.java | 4 +++- .../CarrierPrivilegeAuthenticatorTest.java | 13 ++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/service/src/com/android/server/connectivity/CarrierPrivilegeAuthenticator.java b/service/src/com/android/server/connectivity/CarrierPrivilegeAuthenticator.java index ce955fd6a4..b7617626d3 100644 --- a/service/src/com/android/server/connectivity/CarrierPrivilegeAuthenticator.java +++ b/service/src/com/android/server/connectivity/CarrierPrivilegeAuthenticator.java @@ -19,6 +19,8 @@ package com.android.server.connectivity; import static android.net.NetworkCapabilities.NET_CAPABILITY_CBS; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; +import static com.android.networkstack.apishim.ConstantsShim.RECEIVER_NOT_EXPORTED; + import android.annotation.NonNull; import android.content.BroadcastReceiver; import android.content.Context; @@ -158,7 +160,7 @@ public class CarrierPrivilegeAuthenticator extends BroadcastReceiver { private void registerForCarrierChanges() { final IntentFilter filter = new IntentFilter(); filter.addAction(TelephonyManager.ACTION_MULTI_SIM_CONFIG_CHANGED); - mContext.registerReceiver(this, filter, null, mHandler); + mContext.registerReceiver(this, filter, null, mHandler, RECEIVER_NOT_EXPORTED /* flags */); registerCarrierPrivilegesListeners(); } diff --git a/tests/unit/java/com/android/server/connectivity/CarrierPrivilegeAuthenticatorTest.java b/tests/unit/java/com/android/server/connectivity/CarrierPrivilegeAuthenticatorTest.java index 157507bf28..553cb83548 100644 --- a/tests/unit/java/com/android/server/connectivity/CarrierPrivilegeAuthenticatorTest.java +++ b/tests/unit/java/com/android/server/connectivity/CarrierPrivilegeAuthenticatorTest.java @@ -69,6 +69,8 @@ import java.util.List; @RunWith(DevSdkIgnoreRunner.class) @IgnoreUpTo(SC_V2) // TODO: Use to Build.VERSION_CODES.SC_V2 when available public class CarrierPrivilegeAuthenticatorTest { + // TODO : use ConstantsShim.RECEIVER_NOT_EXPORTED when it's available in tests. + private static final int RECEIVER_NOT_EXPORTED = 4; private static final int SUBSCRIPTION_COUNT = 2; private static final int TEST_SUBSCRIPTION_ID = 1; @@ -115,7 +117,7 @@ public class CarrierPrivilegeAuthenticatorTest { private IntentFilter getIntentFilter() { final ArgumentCaptor captor = ArgumentCaptor.forClass(IntentFilter.class); - verify(mContext).registerReceiver(any(), captor.capture(), any(), any()); + verify(mContext).registerReceiver(any(), captor.capture(), any(), any(), anyInt()); return captor.getValue(); } @@ -138,10 +140,11 @@ public class CarrierPrivilegeAuthenticatorTest { @Test public void testConstructor() throws Exception { verify(mContext).registerReceiver( - eq(mCarrierPrivilegeAuthenticator), - any(IntentFilter.class), - any(), - any()); + eq(mCarrierPrivilegeAuthenticator), + any(IntentFilter.class), + any(), + any(), + eq(RECEIVER_NOT_EXPORTED)); final IntentFilter filter = getIntentFilter(); assertEquals(1, filter.countActions()); assertTrue(filter.hasAction(ACTION_MULTI_SIM_CONFIG_CHANGED));