From cd3c59c6400678adcd175f8a8d1a0d32388ca44e Mon Sep 17 00:00:00 2001 From: Brad Ebinger Date: Thu, 23 Feb 2017 13:14:04 -0800 Subject: [PATCH] Adds read/modify permission checks to ImsService This change adds READ/MODIFY_PHONE_STATE permission checks to the ImsService to ensure that processes without those permissions do not access this service illegally. Test: Manual Change-Id: I7740a9a6b6a12d3f9162aa5d055e7770b05fdff1 --- .../android/telephony/ims/ImsService.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/telephony/java/android/telephony/ims/ImsService.java b/telephony/java/android/telephony/ims/ImsService.java index fe8dbfbd9f241..406f01e82c353 100644 --- a/telephony/java/android/telephony/ims/ImsService.java +++ b/telephony/java/android/telephony/ims/ImsService.java @@ -41,6 +41,9 @@ import com.android.ims.internal.IImsServiceFeatureListener; import com.android.ims.internal.IImsUt; import com.android.internal.annotations.VisibleForTesting; +import static android.Manifest.permission.MODIFY_PHONE_STATE; +import static android.Manifest.permission.READ_PHONE_STATE; + /** * Main ImsService implementation, which binds via the Telephony ImsResolver. Services that extend * ImsService must register the service in their AndroidManifest to be detected by the framework. @@ -94,6 +97,7 @@ public abstract class ImsService extends ImsServiceBase { public void createImsFeature(int slotId, int feature, IImsFeatureStatusCallback c) throws RemoteException { synchronized (mFeatures) { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "createImsFeature"); onCreateImsFeatureInternal(slotId, feature, c); } } @@ -101,6 +105,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public void removeImsFeature(int slotId, int feature) throws RemoteException { synchronized (mFeatures) { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "removeImsFeature"); onRemoveImsFeatureInternal(slotId, feature); } } @@ -108,6 +113,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public int startSession(int slotId, int featureType, PendingIntent incomingCallIntent, IImsRegistrationListener listener) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "startSession"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -120,6 +126,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public void endSession(int slotId, int featureType, int sessionId) throws RemoteException { synchronized (mFeatures) { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "endSession"); MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { feature.endSession(sessionId); @@ -130,6 +137,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public boolean isConnected(int slotId, int featureType, int callSessionType, int callType) throws RemoteException { + enforceCallingOrSelfPermission(READ_PHONE_STATE, "isConnected"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -141,6 +149,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public boolean isOpened(int slotId, int featureType) throws RemoteException { + enforceCallingOrSelfPermission(READ_PHONE_STATE, "isOpened"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -152,6 +161,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public int getFeatureStatus(int slotId, int featureType) throws RemoteException { + enforceCallingOrSelfPermission(READ_PHONE_STATE, "getFeatureStatus"); int status = ImsFeature.STATE_NOT_AVAILABLE; synchronized (mFeatures) { SparseArray featureMap = mFeatures.get(slotId); @@ -168,6 +178,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public void addRegistrationListener(int slotId, int featureType, IImsRegistrationListener listener) throws RemoteException { + enforceCallingOrSelfPermission(READ_PHONE_STATE, "addRegistrationListener"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -179,6 +190,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public void removeRegistrationListener(int slotId, int featureType, IImsRegistrationListener listener) throws RemoteException { + enforceCallingOrSelfPermission(READ_PHONE_STATE, "removeRegistrationListener"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -190,6 +202,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public ImsCallProfile createCallProfile(int slotId, int featureType, int sessionId, int callSessionType, int callType) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "createCallProfile"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -202,6 +215,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public IImsCallSession createCallSession(int slotId, int featureType, int sessionId, ImsCallProfile profile, IImsCallSessionListener listener) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "createCallSession"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -214,6 +228,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public IImsCallSession getPendingCallSession(int slotId, int featureType, int sessionId, String callId) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getPendingCallSession"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -226,6 +241,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public IImsUt getUtInterface(int slotId, int featureType) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getUtInterface"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -238,6 +254,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public IImsConfig getConfigInterface(int slotId, int featureType) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getConfigInterface"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -249,6 +266,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public void turnOnIms(int slotId, int featureType) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "turnOnIms"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -259,6 +277,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public void turnOffIms(int slotId, int featureType) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "turnOffIms"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -270,6 +289,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public IImsEcbm getEcbmInterface(int slotId, int featureType) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getEcbmInterface"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -282,6 +302,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public void setUiTTYMode(int slotId, int featureType, int uiTtyMode, Message onComplete) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "setUiTTYMode"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) { @@ -293,6 +314,7 @@ public abstract class ImsService extends ImsServiceBase { @Override public IImsMultiEndpoint getMultiEndpointInterface(int slotId, int featureType) throws RemoteException { + enforceCallingOrSelfPermission(MODIFY_PHONE_STATE, "getMultiEndpointInterface"); synchronized (mFeatures) { MMTelFeature feature = resolveMMTelFeature(slotId, featureType); if (feature != null) {