summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-02-01 15:23:55 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-02-01 15:23:55 +0000
commit8db7ae8d54bf754a08249a29b2f4136fa5007139 (patch)
treeef73166925f6d887157dce18f94451c36a67bf2f
parentec892fede0be02219fe6260c9b5a89f5536a7364 (diff)
parentb5ed396b15c1d4703c822f53a745d9abb0686a24 (diff)
Merge "[WiFi] Replace internal connectivity checks permission" am: b5ed396b15
Change-Id: I08d5a862a45cd9655410c7fe22ed9fb621241f14
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java8
-rw-r--r--service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java2
-rw-r--r--service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java39
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java20
-rw-r--r--tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java12
-rw-r--r--tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java21
6 files changed, 42 insertions, 60 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 977b24893..c0d65e931 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -683,7 +683,7 @@ public class WifiServiceImpl extends BaseWifiService {
@Override
public String getCurrentNetworkWpsNfcConfigurationToken() {
// while CLs are in flight, return null here, will be removed (b/72423090)
- enforceConnectivityInternalPermission();
+ enforceNetworkStackPermission();
if (mVerboseLoggingEnabled) {
mLog.info("getCurrentNetworkWpsNfcConfigurationToken uid=%")
.c(Binder.getCallingUid()).flush();
@@ -2420,7 +2420,7 @@ public class WifiServiceImpl extends BaseWifiService {
@Override
public void setCountryCode(String countryCode) {
Slog.i(TAG, "WifiService trying to set country code to " + countryCode);
- enforceConnectivityInternalPermission();
+ enforceNetworkStackPermission();
mLog.info("setCountryCode uid=%").c(Binder.getCallingUid()).flush();
final long token = Binder.clearCallingIdentity();
mCountryCode.setCountryCode(countryCode);
@@ -2435,7 +2435,7 @@ public class WifiServiceImpl extends BaseWifiService {
*/
@Override
public String getCountryCode() {
- enforceConnectivityInternalPermission();
+ enforceNetworkStackPermission();
if (mVerboseLoggingEnabled) {
mLog.info("getCountryCode uid=%").c(Binder.getCallingUid()).flush();
}
@@ -2973,7 +2973,7 @@ public class WifiServiceImpl extends BaseWifiService {
@Override
public void factoryReset(String packageName) {
- enforceConnectivityInternalPermission();
+ enforceNetworkSettingsPermission();
if (enforceChangePermission(packageName) != MODE_ALLOWED) {
return;
}
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java b/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
index 5832ee898..ac42118e6 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
@@ -1369,7 +1369,7 @@ public class WifiAwareDataPathStateManager {
// validate permission if PMK is used (SystemApi)
if (ns.pmk != null && ns.pmk.length != 0) {
- if (permissionWrapper.getUidPermission(Manifest.permission.CONNECTIVITY_INTERNAL,
+ if (permissionWrapper.getUidPermission(Manifest.permission.NETWORK_STACK,
ns.requestorUid) != PackageManager.PERMISSION_GRANTED) {
Log.e(TAG, "processNetworkSpecifier: networkSpecifier=" + ns.toString()
+ " -- UID doesn't have permission to use PMK API");
diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
index 055fa72ef..9f5a3cbad 100644
--- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
+++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
@@ -34,6 +34,7 @@ import android.net.InterfaceConfiguration;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.NetworkInfo;
+import android.net.NetworkStack;
import android.net.NetworkUtils;
import android.net.ip.IIpClient;
import android.net.ip.IpClientCallbacks;
@@ -485,27 +486,28 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
"WifiP2pService");
}
- private void enforceConnectivityInternalPermission() {
- mContext.enforceCallingOrSelfPermission(
- android.Manifest.permission.CONNECTIVITY_INTERNAL,
- "WifiP2pService");
- }
-
- private int checkConnectivityInternalPermission() {
- return mContext.checkCallingOrSelfPermission(
- android.Manifest.permission.CONNECTIVITY_INTERNAL);
+ private boolean checkAnyPermissionOf(String... permissions) {
+ for (String permission : permissions) {
+ if (mContext.checkCallingOrSelfPermission(permission)
+ == PackageManager.PERMISSION_GRANTED) {
+ return true;
+ }
+ }
+ return false;
}
- private int checkLocationHardwarePermission() {
- return mContext.checkCallingOrSelfPermission(
- android.Manifest.permission.LOCATION_HARDWARE);
+ private void enforceAnyPermissionOf(String... permissions) {
+ if (!checkAnyPermissionOf(permissions)) {
+ throw new SecurityException("Requires one of the following permissions: "
+ + String.join(", ", permissions) + ".");
+ }
}
- private void enforceConnectivityInternalOrLocationHardwarePermission() {
- if (checkConnectivityInternalPermission() != PackageManager.PERMISSION_GRANTED
- && checkLocationHardwarePermission() != PackageManager.PERMISSION_GRANTED) {
- enforceConnectivityInternalPermission();
- }
+ private void enforceNetworkStackOrLocationHardwarePermission() {
+ enforceAnyPermissionOf(
+ android.Manifest.permission.LOCATION_HARDWARE,
+ android.Manifest.permission.NETWORK_STACK,
+ NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
}
private void stopIpClient() {
@@ -624,7 +626,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
*/
@Override
public Messenger getP2pStateMachineMessenger() {
- enforceConnectivityInternalOrLocationHardwarePermission();
+ enforceNetworkStackOrLocationHardwarePermission();
enforceAccessPermission();
enforceChangePermission();
return new Messenger(mP2pStateMachine.getHandler());
@@ -678,7 +680,6 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub {
*/
@Override
public void setMiracastMode(int mode) {
- enforceConnectivityInternalPermission();
checkConfigureWifiDisplayPermission();
mP2pStateMachine.sendMessage(SET_MIRACAST_MODE, mode);
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
index e6e7a2b72..b7b7dd17e 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
@@ -3116,14 +3116,14 @@ public class WifiServiceImplTest {
/**
* Verify that setCountryCode() fails and doesn't call WifiCountryCode object
- * if the caller doesn't have CONNECTIVITY_INTERNAL permission.
+ * if the caller doesn't have NETWORK_STACK permission.
*/
@Test(expected = SecurityException.class)
- public void testSetCountryCodeFailsWithoutConnectivityInternalPermission() throws Exception {
- doThrow(new SecurityException()).when(mContext)
- .enforceCallingOrSelfPermission(
- eq(android.Manifest.permission.CONNECTIVITY_INTERNAL),
- eq("ConnectivityService"));
+ public void testSetCountryCodeFailsWithoutNetworkStackPermission() throws Exception {
+ when(mContext.checkCallingOrSelfPermission(android.Manifest.permission.NETWORK_STACK))
+ .thenReturn(PackageManager.PERMISSION_DENIED);
+ doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
+ eq(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK), any());
mWifiServiceImpl.setCountryCode(TEST_COUNTRY_CODE);
verify(mWifiCountryCode, never()).setCountryCode(TEST_COUNTRY_CODE);
}
@@ -3701,13 +3701,13 @@ public class WifiServiceImplTest {
/**
* Verify that a call to factoryReset throws a SecurityException if the caller does not have
- * the CONNECTIVITY_INTERNAL permission.
+ * the NETWORK_SETTINGS permission.
*/
@Test
- public void testFactoryResetWithoutConnectivityInternalPermission() throws Exception {
+ public void testFactoryResetWithoutNetworkSettingsPermission() throws Exception {
doThrow(new SecurityException()).when(mContext)
- .enforceCallingOrSelfPermission(eq(Manifest.permission.CONNECTIVITY_INTERNAL),
- eq("ConnectivityService"));
+ .enforceCallingOrSelfPermission(eq(Manifest.permission.NETWORK_SETTINGS),
+ eq("WifiService"));
mWifiServiceImpl.mClientModeImplChannel = mAsyncChannel;
try {
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 0f3e73cf9..2cc9f14ff 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareDataPathStateManagerTest.java
@@ -179,8 +179,8 @@ public class WifiAwareDataPathStateManagerTest {
when(mMockPowerManager.isDeviceIdleMode()).thenReturn(false);
when(mMockPowerManager.isInteractive()).thenReturn(true);
- when(mPermissionsWrapperMock.getUidPermission(eq(Manifest.permission.CONNECTIVITY_INTERNAL),
- anyInt())).thenReturn(PackageManager.PERMISSION_GRANTED);
+ when(mPermissionsWrapperMock.getUidPermission(eq(Manifest.permission.NETWORK_STACK),
+ eq(Process.myUid()))).thenReturn(PackageManager.PERMISSION_GRANTED);
mDut.mDataPathMgr.mNwService = mMockNwMgt;
mDut.mDataPathMgr.mNiWrapper = mMockNetworkInterface;
@@ -288,8 +288,8 @@ public class WifiAwareDataPathStateManagerTest {
InOrder inOrder = inOrder(mMockNative, mMockCm, mMockCallback, mMockSessionCallback);
InOrder inOrderM = inOrder(mAwareMetricsMock);
- when(mPermissionsWrapperMock.getUidPermission(eq(Manifest.permission.CONNECTIVITY_INTERNAL),
- anyInt())).thenReturn(PackageManager.PERMISSION_DENIED);
+ when(mPermissionsWrapperMock.getUidPermission(eq(Manifest.permission.NETWORK_STACK),
+ eq(Process.myUid()))).thenReturn(PackageManager.PERMISSION_DENIED);
// (0) initialize
DataPathEndPointInfo res = initDataPathEndPoint(true, clientId, pubSubId, requestorId,
@@ -1319,7 +1319,7 @@ public class WifiAwareDataPathStateManagerTest {
if (!providePmk) {
when(mPermissionsWrapperMock.getUidPermission(
- eq(Manifest.permission.CONNECTIVITY_INTERNAL), anyInt())).thenReturn(
+ eq(Manifest.permission.NETWORK_STACK), eq(Process.myUid()))).thenReturn(
PackageManager.PERMISSION_DENIED);
}
@@ -1481,7 +1481,7 @@ public class WifiAwareDataPathStateManagerTest {
if (providePmk) {
when(mPermissionsWrapperMock.getUidPermission(
- eq(Manifest.permission.CONNECTIVITY_INTERNAL), anyInt())).thenReturn(
+ eq(Manifest.permission.NETWORK_STACK), eq(Process.myUid()))).thenReturn(
PackageManager.PERMISSION_GRANTED);
}
diff --git a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
index 1091c1dac..4f6357757 100644
--- a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
@@ -3036,8 +3036,6 @@ public class WifiP2pServiceImplTest {
.thenReturn(PackageManager.PERMISSION_GRANTED);
mWifiP2pServiceImpl.setMiracastMode(0);
mLooper.dispatchAll();
- verify(mContext).enforceCallingOrSelfPermission(
- eq(android.Manifest.permission.CONNECTIVITY_INTERNAL), eq("WifiP2pService"));
verify(mWifiInjector).getWifiPermissionsWrapper();
verify(mWifiPermissionsWrapper).getUidPermission(
eq(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY), anyInt());
@@ -3054,8 +3052,6 @@ public class WifiP2pServiceImplTest {
.thenReturn(PackageManager.PERMISSION_GRANTED);
mWifiP2pServiceImpl.setMiracastMode(0);
mLooper.dispatchAll();
- verify(mContext).enforceCallingOrSelfPermission(
- eq(android.Manifest.permission.CONNECTIVITY_INTERNAL), eq("WifiP2pService"));
verify(mWifiInjector).getWifiPermissionsWrapper();
verify(mWifiPermissionsWrapper).getUidPermission(
eq(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY), anyInt());
@@ -3063,29 +3059,14 @@ public class WifiP2pServiceImplTest {
}
/**
- * Verify the call setMiracastMode when CONNECTIVITY_INTERNAL permission denied.
- */
- @Test(expected = SecurityException.class)
- public void testSetMiracastModeWhenPermissionDeined1() throws Exception {
- doThrow(SecurityException.class).when(mContext)
- .enforceCallingOrSelfPermission(anyString(), anyString());
- mWifiP2pServiceImpl.setMiracastMode(0);
- verify(mContext).enforceCallingOrSelfPermission(
- eq(android.Manifest.permission.CONNECTIVITY_INTERNAL), eq("WifiP2pService"));
- verify(mWifiNative, never()).setMiracastMode(anyInt());
- }
-
- /**
* Verify the call setMiracastMode when CONFIGURE_WIFI_DISPLAY permission denied.
*/
@Test(expected = SecurityException.class)
- public void testSetMiracastModeWhenPermissionDeined2() throws Exception {
+ public void testSetMiracastModeWhenPermissionDeined() throws Exception {
when(mWifiInjector.getWifiPermissionsWrapper()).thenReturn(mWifiPermissionsWrapper);
when(mWifiPermissionsWrapper.getUidPermission(anyString(), anyInt()))
.thenReturn(PackageManager.PERMISSION_DENIED);
mWifiP2pServiceImpl.setMiracastMode(0);
- verify(mContext).enforceCallingOrSelfPermission(
- eq(android.Manifest.permission.CONNECTIVITY_INTERNAL), eq("WifiP2pService"));
verify(mWifiInjector).getWifiPermissionsWrapper();
verify(mWifiPermissionsWrapper).getUidPermission(
eq(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY), anyInt());