Merge "Throw IAE when Network's LinkProperties is null" am: 5345fa1144

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2101892

Change-Id: I3fbe53867df490d23703a681ae3fc99d33c2b9ea
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Yan Yan
2022-05-23 17:40:18 +00:00
committed by Automerger Merge Worker
3 changed files with 26 additions and 5 deletions

View File

@@ -817,10 +817,10 @@ public class IpSecManager {
* </ol>
*
* @param underlyingNetwork the new {@link Network} that will carry traffic for this tunnel.
* This network MUST never be the network exposing this IpSecTunnelInterface, otherwise
* this method will throw an {@link IllegalArgumentException}. If the
* IpSecTunnelInterface is later added to this network, all outbound traffic will be
* blackholed.
* This network MUST be a functional {@link Network} with valid {@link LinkProperties},
* and MUST never be the network exposing this IpSecTunnelInterface, otherwise this
* method will throw an {@link IllegalArgumentException}. If the IpSecTunnelInterface is
* later added to this network, all outbound traffic will be blackholed.
*/
// TODO: b/169171001 Update the documentation when transform migration is supported.
// The purpose of making updating network and applying transforms separate is to leave open
@@ -962,7 +962,6 @@ public class IpSecManager {
* IP header and IPsec Header on all inbound traffic).
* <p>Applications should probably not use this API directly.
*
*
* @param tunnel The {@link IpSecManager#IpSecTunnelInterface} that will use the supplied
* transform.
* @param direction the direction, {@link DIRECTION_OUT} or {@link #DIRECTION_IN} in which

View File

@@ -1452,6 +1452,11 @@ public class IpSecService extends IIpSecService.Stub {
final ConnectivityManager connectivityManager =
mContext.getSystemService(ConnectivityManager.class);
final LinkProperties lp = connectivityManager.getLinkProperties(underlyingNetwork);
if (lp == null) {
throw new IllegalArgumentException(
"LinkProperties is null. The underlyingNetwork may not be functional");
}
if (tunnelInterfaceInfo.getInterfaceName().equals(lp.getInterfaceName())) {
throw new IllegalArgumentException(
"Underlying network cannot be the network being exposed by this tunnel");

View File

@@ -782,6 +782,23 @@ public class IpSecServiceParameterizedTest {
assertEquals(newFakeNetwork, tunnelInterfaceInfo.getUnderlyingNetwork());
}
@Test
public void testSetNetworkForTunnelInterfaceFailsForNullLp() throws Exception {
final IpSecTunnelInterfaceResponse createTunnelResp =
createAndValidateTunnel(mSourceAddr, mDestinationAddr, BLESSED_PACKAGE);
final Network newFakeNetwork = new Network(1000);
final int tunnelIfaceResourceId = createTunnelResp.resourceId;
try {
mIpSecService.setNetworkForTunnelInterface(
tunnelIfaceResourceId, newFakeNetwork, BLESSED_PACKAGE);
fail(
"Expected an IllegalArgumentException for underlying network with null"
+ " LinkProperties");
} catch (IllegalArgumentException expected) {
}
}
@Test
public void testSetNetworkForTunnelInterfaceFailsForInvalidResourceId() throws Exception {
final IpSecTunnelInterfaceResponse createTunnelResp =