From 4396c1b244378e6f1608fd6119554382ef86606b Mon Sep 17 00:00:00 2001 From: lucaslin Date: Tue, 29 Jun 2021 15:22:35 +0800 Subject: [PATCH] Fix Ikev2 vpn cannot establish through startLegacyVpn() Settings will also call startLegacyVpn() to bring up Ikev2 VPN, so it's needed to add a vpn type check in startLegacyVpn(). Otherwise, UnsupportedOperationException will be thrown when Settings tries to bring up Ikev2 VPN. Bug: 191937302 Bug: 188749090 Bug: 189808606 Test: 1. make gts && gts-tradefed 2. run gts --module GtsNetworkStackHostTestCases Change-Id: I752c39bd1bf953a11bdf62e6f02f99f48fef23c4 Merged-In: I752c39bd1bf953a11bdf62e6f02f99f48fef23c4 --- core/java/com/android/internal/net/VpnProfile.java | 13 ++++++++----- .../java/com/android/server/VpnManagerService.java | 3 ++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/core/java/com/android/internal/net/VpnProfile.java b/core/java/com/android/internal/net/VpnProfile.java index 6e1d3ce9a2979..5f84b5a923051 100644 --- a/core/java/com/android/internal/net/VpnProfile.java +++ b/core/java/com/android/internal/net/VpnProfile.java @@ -377,12 +377,15 @@ public final class VpnProfile implements Cloneable, Parcelable { /** Checks if this profile specifies a LegacyVpn type. */ public static boolean isLegacyType(int type) { switch (type) { - case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS: // fall through - case VpnProfile.TYPE_IKEV2_IPSEC_RSA: // fall through - case VpnProfile.TYPE_IKEV2_IPSEC_PSK: - return false; - default: + case VpnProfile.TYPE_PPTP: + case VpnProfile.TYPE_L2TP_IPSEC_PSK: + case VpnProfile.TYPE_L2TP_IPSEC_RSA: + case VpnProfile.TYPE_IPSEC_XAUTH_PSK: + case VpnProfile.TYPE_IPSEC_XAUTH_RSA: + case VpnProfile.TYPE_IPSEC_HYBRID_RSA: return true; + default: + return false; } } diff --git a/services/core/java/com/android/server/VpnManagerService.java b/services/core/java/com/android/server/VpnManagerService.java index 70176a0fefeb0..d483f1863258f 100644 --- a/services/core/java/com/android/server/VpnManagerService.java +++ b/services/core/java/com/android/server/VpnManagerService.java @@ -357,7 +357,8 @@ public class VpnManagerService extends IVpnManager.Stub { @SuppressWarnings("AndroidFrameworkCompatChange") // This is not an app-visible API. @Override public void startLegacyVpn(VpnProfile profile) { - if (Build.VERSION.DEVICE_INITIAL_SDK_INT >= Build.VERSION_CODES.S) { + if (Build.VERSION.DEVICE_INITIAL_SDK_INT >= Build.VERSION_CODES.S + && VpnProfile.isLegacyType(profile.type)) { throw new UnsupportedOperationException("Legacy VPN is deprecated"); } int user = UserHandle.getUserId(mDeps.getCallingUid());