Merge changes Ifa2aa335,I09366a7f am: 708c77d236 am: 7c2b530a09

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1565201

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I75892e729ba690205bea14512edef97d271611f0
This commit is contained in:
Lorenzo Colitti
2021-02-03 15:54:14 +00:00
committed by Automerger Merge Worker
4 changed files with 14 additions and 10 deletions

View File

@@ -4838,7 +4838,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
synchronized (mVpns) { synchronized (mVpns) {
throwIfLockdownEnabled(); throwIfLockdownEnabled();
mVpns.get(user).startLegacyVpn(profile, mKeyStore, egress); mVpns.get(user).startLegacyVpn(profile, mKeyStore, null /* underlying */, egress);
} }
} }
@@ -8068,7 +8068,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
int user = UserHandle.getUserId(mDeps.getCallingUid()); int user = UserHandle.getUserId(mDeps.getCallingUid());
final boolean success; final boolean success;
synchronized (mVpns) { synchronized (mVpns) {
throwIfLockdownEnabled();
success = mVpns.get(user).setUnderlyingNetworks(networks); success = mVpns.get(user).setUnderlyingNetworks(networks);
} }
return success; return success;

View File

@@ -1982,27 +1982,28 @@ public class Vpn {
* secondary thread to perform connection work, returning quickly. * secondary thread to perform connection work, returning quickly.
* *
* Should only be called to respond to Binder requests as this enforces caller permission. Use * Should only be called to respond to Binder requests as this enforces caller permission. Use
* {@link #startLegacyVpnPrivileged(VpnProfile, KeyStore, LinkProperties)} to skip the * {@link #startLegacyVpnPrivileged(VpnProfile, KeyStore, Network, LinkProperties)} to skip the
* permission check only when the caller is trusted (or the call is initiated by the system). * permission check only when the caller is trusted (or the call is initiated by the system).
*/ */
public void startLegacyVpn(VpnProfile profile, KeyStore keyStore, LinkProperties egress) { public void startLegacyVpn(VpnProfile profile, KeyStore keyStore, @Nullable Network underlying,
LinkProperties egress) {
enforceControlPermission(); enforceControlPermission();
final long token = Binder.clearCallingIdentity(); final long token = Binder.clearCallingIdentity();
try { try {
startLegacyVpnPrivileged(profile, keyStore, egress); startLegacyVpnPrivileged(profile, keyStore, underlying, egress);
} finally { } finally {
Binder.restoreCallingIdentity(token); Binder.restoreCallingIdentity(token);
} }
} }
/** /**
* Like {@link #startLegacyVpn(VpnProfile, KeyStore, LinkProperties)}, but does not check * Like {@link #startLegacyVpn(VpnProfile, KeyStore, Network, LinkProperties)}, but does not
* permissions under the assumption that the caller is the system. * check permissions under the assumption that the caller is the system.
* *
* Callers are responsible for checking permissions if needed. * Callers are responsible for checking permissions if needed.
*/ */
public void startLegacyVpnPrivileged(VpnProfile profile, KeyStore keyStore, public void startLegacyVpnPrivileged(VpnProfile profile, KeyStore keyStore,
LinkProperties egress) { @Nullable Network underlying, @NonNull LinkProperties egress) {
UserManager mgr = UserManager.get(mContext); UserManager mgr = UserManager.get(mContext);
UserInfo user = mgr.getUserInfo(mUserId); UserInfo user = mgr.getUserInfo(mUserId);
if (user.isRestricted() || mgr.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN, if (user.isRestricted() || mgr.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN,
@@ -2128,6 +2129,9 @@ public class Vpn {
config.session = profile.name; config.session = profile.name;
config.isMetered = false; config.isMetered = false;
config.proxyInfo = profile.proxy; config.proxyInfo = profile.proxy;
if (underlying != null) {
config.underlyingNetworks = new Network[] { underlying };
}
config.addLegacyRoutes(profile.routes); config.addLegacyRoutes(profile.routes);
if (!profile.dnsServers.isEmpty()) { if (!profile.dnsServers.isEmpty()) {

View File

@@ -155,7 +155,7 @@ public class LockdownVpnTracker {
try { try {
// Use the privileged method because Lockdown VPN is initiated by the system, so // Use the privileged method because Lockdown VPN is initiated by the system, so
// no additional permission checks are necessary. // no additional permission checks are necessary.
mVpn.startLegacyVpnPrivileged(mProfile, mKeyStore, egressProp); mVpn.startLegacyVpnPrivileged(mProfile, mKeyStore, null, egressProp);
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
mAcceptedEgressIface = null; mAcceptedEgressIface = null;
Log.e(TAG, "Failed to start VPN", e); Log.e(TAG, "Failed to start VPN", e);

View File

@@ -148,6 +148,7 @@ public class VpnTest {
managedProfileA.profileGroupId = primaryUser.id; managedProfileA.profileGroupId = primaryUser.id;
} }
static final Network EGRESS_NETWORK = new Network(101);
static final String EGRESS_IFACE = "wlan0"; static final String EGRESS_IFACE = "wlan0";
static final String TEST_VPN_PKG = "com.testvpn.vpn"; static final String TEST_VPN_PKG = "com.testvpn.vpn";
private static final String TEST_VPN_SERVER = "1.2.3.4"; private static final String TEST_VPN_SERVER = "1.2.3.4";
@@ -963,7 +964,7 @@ public class VpnTest {
InetAddresses.parseNumericAddress("192.0.2.0"), EGRESS_IFACE); InetAddresses.parseNumericAddress("192.0.2.0"), EGRESS_IFACE);
lp.addRoute(defaultRoute); lp.addRoute(defaultRoute);
vpn.startLegacyVpn(vpnProfile, mKeyStore, lp); vpn.startLegacyVpn(vpnProfile, mKeyStore, EGRESS_NETWORK, lp);
return vpn; return vpn;
} }