[AWARE] Check dynamic location permission
Add check for dynamic location permission.
Bug: 70499417
Test: unit tests, integration tests, CtsVerifier
Change-Id: I69ac0b46ecad27eca45853848cd17fc1f2ec9eef
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareService.java b/service/java/com/android/server/wifi/aware/WifiAwareService.java
index 40b2e39..f38c373 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareService.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareService.java
@@ -69,6 +69,7 @@
HandlerThread awareHandlerThread = wifiInjector.getWifiAwareHandlerThread();
mImpl.start(awareHandlerThread, wifiAwareStateManager, wifiAwareShellCommand,
wifiInjector.getWifiMetrics().getWifiAwareMetrics(),
+ wifiInjector.getWifiPermissionsUtil(),
wifiInjector.getWifiPermissionsWrapper(), wifiInjector.getFrameworkFacade(),
wifiAwareNativeManager, wifiAwareNativeApi, wifiAwareNativeCallback);
} else if (phase == SystemService.PHASE_BOOT_COMPLETED) {
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareServiceImpl.java b/service/java/com/android/server/wifi/aware/WifiAwareServiceImpl.java
index 27261e0..f92249e 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareServiceImpl.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareServiceImpl.java
@@ -44,6 +44,7 @@
import com.android.server.wifi.FrameworkFacade;
import com.android.server.wifi.WifiInjector;
+import com.android.server.wifi.util.WifiPermissionsUtil;
import com.android.server.wifi.util.WifiPermissionsWrapper;
import java.io.FileDescriptor;
@@ -62,6 +63,7 @@
/* package */ boolean mDbg = false;
private Context mContext;
+ private WifiPermissionsUtil mWifiPermissionsUtil;
private WifiAwareStateManager mStateManager;
private WifiAwareShellCommand mShellCommand;
@@ -89,11 +91,13 @@
*/
public void start(HandlerThread handlerThread, WifiAwareStateManager awareStateManager,
WifiAwareShellCommand awareShellCommand, WifiAwareMetrics awareMetrics,
- WifiPermissionsWrapper permissionsWrapper, FrameworkFacade frameworkFacade,
- WifiAwareNativeManager wifiAwareNativeManager, WifiAwareNativeApi wifiAwareNativeApi,
+ WifiPermissionsUtil wifiPermissionsUtil, WifiPermissionsWrapper permissionsWrapper,
+ FrameworkFacade frameworkFacade, WifiAwareNativeManager wifiAwareNativeManager,
+ WifiAwareNativeApi wifiAwareNativeApi,
WifiAwareNativeCallback wifiAwareNativeCallback) {
Log.i(TAG, "Starting Wi-Fi Aware service");
+ mWifiPermissionsUtil = wifiPermissionsUtil;
mStateManager = awareStateManager;
mShellCommand = awareShellCommand;
mStateManager.start(mContext, handlerThread.getLooper(), awareMetrics, permissionsWrapper);
@@ -177,7 +181,7 @@
}
if (notifyOnIdentityChanged) {
- enforceLocationPermission();
+ enforceLocationPermission(callingPackage, getMockableCallingUid());
}
if (configRequest != null) {
@@ -277,11 +281,11 @@
}
@Override
- public void publish(int clientId, PublishConfig publishConfig,
+ public void publish(String callingPackage, int clientId, PublishConfig publishConfig,
IWifiAwareDiscoverySessionCallback callback) {
enforceAccessPermission();
enforceChangePermission();
- enforceLocationPermission();
+ enforceLocationPermission(callingPackage, getMockableCallingUid());
if (callback == null) {
throw new IllegalArgumentException("Callback must not be null");
@@ -324,11 +328,11 @@
}
@Override
- public void subscribe(int clientId, SubscribeConfig subscribeConfig,
+ public void subscribe(String callingPackage, int clientId, SubscribeConfig subscribeConfig,
IWifiAwareDiscoverySessionCallback callback) {
enforceAccessPermission();
enforceChangePermission();
- enforceLocationPermission();
+ enforceLocationPermission(callingPackage, getMockableCallingUid());
if (callback == null) {
throw new IllegalArgumentException("Callback must not be null");
@@ -450,9 +454,8 @@
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.CHANGE_WIFI_STATE, TAG);
}
- private void enforceLocationPermission() {
- mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION,
- TAG);
+ private void enforceLocationPermission(String callingPackage, int uid) {
+ mWifiPermissionsUtil.enforceLocationPermission(callingPackage, uid);
}
private void enforceNetworkStackPermission() {
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
index f168c8c..537845c 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
@@ -1213,12 +1213,12 @@
if (doPublish) {
sessionCaptor.getValue().publish(publishConfig, mockSessionCallback,
mMockLooperHandler);
- inOrderS.verify(mockAwareService).publish(eq(clientId), eq(publishConfig),
+ inOrderS.verify(mockAwareService).publish(any(), eq(clientId), eq(publishConfig),
sessionProxyCallback.capture());
} else {
sessionCaptor.getValue().subscribe(subscribeConfig, mockSessionCallback,
mMockLooperHandler);
- inOrderS.verify(mockAwareService).subscribe(eq(clientId), eq(subscribeConfig),
+ inOrderS.verify(mockAwareService).subscribe(any(), eq(clientId), eq(subscribeConfig),
sessionProxyCallback.capture());
}
sessionProxyCallback.getValue().onSessionStarted(sessionId);
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareServiceImplTest.java
index 2d17751..a12e41f 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareServiceImplTest.java
@@ -49,6 +49,7 @@
import android.util.SparseIntArray;
import com.android.server.wifi.FrameworkFacade;
+import com.android.server.wifi.util.WifiPermissionsUtil;
import com.android.server.wifi.util.WifiPermissionsWrapper;
import org.junit.Before;
@@ -72,6 +73,7 @@
private WifiAwareServiceImplSpy mDut;
private int mDefaultUid = 1500;
+ private String mPackageName = "some.package";
private TestLooper mMockLooper;
@Mock
@@ -91,6 +93,7 @@
@Mock
private IWifiAwareDiscoverySessionCallback mSessionCallbackMock;
@Mock private WifiAwareMetrics mAwareMetricsMock;
+ @Mock private WifiPermissionsUtil mWifiPermissionsUtil;
@Mock private WifiPermissionsWrapper mPermissionsWrapperMock;
@Mock
FrameworkFacade mFrameworkFacade;
@@ -139,7 +142,7 @@
mDut = new WifiAwareServiceImplSpy(mContextMock);
mDut.fakeUid = mDefaultUid;
mDut.start(mHandlerThreadMock, mAwareStateManagerMock, mWifiAwareShellCommandMock,
- mAwareMetricsMock, mPermissionsWrapperMock, mFrameworkFacade,
+ mAwareMetricsMock, mWifiPermissionsUtil, mPermissionsWrapperMock, mFrameworkFacade,
mock(WifiAwareNativeManager.class), mock(WifiAwareNativeApi.class),
mock(WifiAwareNativeCallback.class));
verify(mAwareStateManagerMock).start(eq(mContextMock), any(), eq(mAwareMetricsMock),
@@ -247,7 +250,7 @@
PublishConfig publishConfig = new PublishConfig.Builder().setServiceName("valid.value")
.build();
- mDut.publish(clientId, publishConfig, mSessionCallbackMock);
+ mDut.publish(mPackageName, clientId, publishConfig, mSessionCallbackMock);
verify(mAwareStateManagerMock).publish(clientId, publishConfig, mSessionCallbackMock);
assertTrue("SecurityException for invalid access from wrong UID thrown", failsAsExpected);
@@ -267,7 +270,7 @@
IWifiAwareDiscoverySessionCallback mockCallback = mock(
IWifiAwareDiscoverySessionCallback.class);
- mDut.publish(clientId, publishConfig, mockCallback);
+ mDut.publish(mPackageName, clientId, publishConfig, mockCallback);
}
/**
@@ -284,7 +287,7 @@
IWifiAwareDiscoverySessionCallback mockCallback = mock(
IWifiAwareDiscoverySessionCallback.class);
- mDut.subscribe(clientId, subscribeConfig, mockCallback);
+ mDut.subscribe(mPackageName, clientId, subscribeConfig, mockCallback);
}
@@ -351,7 +354,7 @@
IWifiAwareDiscoverySessionCallback mockCallback = mock(
IWifiAwareDiscoverySessionCallback.class);
- mDut.publish(clientId, publishConfig, mockCallback);
+ mDut.publish(mPackageName, clientId, publishConfig, mockCallback);
verify(mAwareStateManagerMock).publish(clientId, publishConfig, mockCallback);
}
@@ -446,7 +449,7 @@
IWifiAwareDiscoverySessionCallback mockCallback = mock(
IWifiAwareDiscoverySessionCallback.class);
- mDut.subscribe(clientId, subscribeConfig, mockCallback);
+ mDut.subscribe(mPackageName, clientId, subscribeConfig, mockCallback);
verify(mAwareStateManagerMock).subscribe(clientId, subscribeConfig, mockCallback);
}
@@ -632,7 +635,7 @@
IWifiAwareDiscoverySessionCallback mockCallback = mock(
IWifiAwareDiscoverySessionCallback.class);
- mDut.publish(clientId, publishConfig, mockCallback);
+ mDut.publish(mPackageName, clientId, publishConfig, mockCallback);
verify(mAwareStateManagerMock).publish(clientId, publishConfig, mockCallback);
}
@@ -648,7 +651,7 @@
IWifiAwareDiscoverySessionCallback mockCallback = mock(
IWifiAwareDiscoverySessionCallback.class);
- mDut.subscribe(clientId, subscribeConfig, mockCallback);
+ mDut.subscribe(mPackageName, clientId, subscribeConfig, mockCallback);
verify(mAwareStateManagerMock).subscribe(clientId, subscribeConfig, mockCallback);
}