NetworkRequest: Embed requestor uid & packageName
Add the requestorUid & requestorPackageName fields to NetworkCapabilities. This is populated by CS when a new network request is received. These 2 requestor fields are also optionally used for network matching. All of the regular app initiated requests will have the requestor uid and package name set by connectivity service. Network agents can optionally set the requestorUid and requestorPackageName to restrict the network created only to the app that requested the network. This will help removing the necessity for the various specifiers to embed the uid & package name info in the specifier for network matching. Note: NetworkSpecifier.assertValidFromUid() is deprecated & removed in favor of setting the uid/package name on the agent to restrict the network to a certain app (useful for wifi peer to peer API & wifi aware). Bug: 144102365 Test: Verified that wifi network request related CTS verifier tests pass. Test: Device boots up and connects to wifi networks Change-Id: I207c446108afdac7ee2c25e6bbcbc37c4e3f6529 Merged-In: I207c446108afdac7ee2c25e6bbcbc37c4e3f6529
This commit is contained in:
@@ -107,6 +107,7 @@ import static org.mockito.Mockito.atLeastOnce;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.doNothing;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.inOrder;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
@@ -305,6 +306,7 @@ public class ConnectivityServiceTest {
|
||||
private static final String MOBILE_IFNAME = "test_rmnet_data0";
|
||||
private static final String WIFI_IFNAME = "test_wlan0";
|
||||
private static final String WIFI_WOL_IFNAME = "test_wlan_wol";
|
||||
private static final String TEST_PACKAGE_NAME = "com.android.test.package";
|
||||
private static final String[] EMPTY_STRING_ARRAY = new String[0];
|
||||
|
||||
private MockContext mServiceContext;
|
||||
@@ -654,7 +656,7 @@ public class ConnectivityServiceTest {
|
||||
|
||||
if (mNmValidationRedirectUrl != null) {
|
||||
mNmCallbacks.showProvisioningNotification(
|
||||
"test_provisioning_notif_action", "com.android.test.package");
|
||||
"test_provisioning_notif_action", TEST_PACKAGE_NAME);
|
||||
mNmProvNotificationRequested = true;
|
||||
}
|
||||
}
|
||||
@@ -2972,7 +2974,7 @@ public class ConnectivityServiceTest {
|
||||
networkCapabilities.addTransportType(TRANSPORT_WIFI)
|
||||
.setNetworkSpecifier(new MatchAllNetworkSpecifier());
|
||||
mService.requestNetwork(networkCapabilities, null, 0, null,
|
||||
ConnectivityManager.TYPE_WIFI);
|
||||
ConnectivityManager.TYPE_WIFI, TEST_PACKAGE_NAME);
|
||||
});
|
||||
|
||||
class NonParcelableSpecifier extends NetworkSpecifier {
|
||||
@@ -3011,31 +3013,12 @@ public class ConnectivityServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNetworkSpecifierUidSpoofSecurityException() throws Exception {
|
||||
class UidAwareNetworkSpecifier extends NetworkSpecifier implements Parcelable {
|
||||
@Override
|
||||
public boolean satisfiedBy(NetworkSpecifier other) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void assertValidFromUid(int requestorUid) {
|
||||
throw new SecurityException("failure");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() { return 0; }
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {}
|
||||
}
|
||||
|
||||
public void testNetworkRequestUidSpoofSecurityException() throws Exception {
|
||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||
mWiFiNetworkAgent.connect(false);
|
||||
|
||||
UidAwareNetworkSpecifier networkSpecifier = new UidAwareNetworkSpecifier();
|
||||
NetworkRequest networkRequest = newWifiRequestBuilder().setNetworkSpecifier(
|
||||
networkSpecifier).build();
|
||||
NetworkRequest networkRequest = newWifiRequestBuilder().build();
|
||||
TestNetworkCallback networkCallback = new TestNetworkCallback();
|
||||
doThrow(new SecurityException()).when(mAppOpsManager).checkPackage(anyInt(), anyString());
|
||||
assertThrows(SecurityException.class, () -> {
|
||||
mCm.requestNetwork(networkRequest, networkCallback);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user