Merge "Replace the permission of internal connectivity checks"
This commit is contained in:
@@ -1395,7 +1395,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public Network getActiveNetworkForUid(int uid, boolean ignoreBlocked) {
|
||||
enforceConnectivityInternalPermission();
|
||||
NetworkStack.checkNetworkStackPermission(mContext);
|
||||
return getActiveNetworkForUidInternal(uid, ignoreBlocked);
|
||||
}
|
||||
|
||||
@@ -1437,7 +1437,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public NetworkInfo getActiveNetworkInfoForUid(int uid, boolean ignoreBlocked) {
|
||||
enforceConnectivityInternalPermission();
|
||||
NetworkStack.checkNetworkStackPermission(mContext);
|
||||
final NetworkState state = getUnfilteredActiveNetworkState(uid);
|
||||
filterNetworkStateForUid(state, uid, ignoreBlocked);
|
||||
return state.networkInfo;
|
||||
@@ -1656,8 +1656,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public NetworkState[] getAllNetworkState() {
|
||||
// Require internal since we're handing out IMSI details
|
||||
enforceConnectivityInternalPermission();
|
||||
// This contains IMSI details, so make sure the caller is privileged.
|
||||
NetworkStack.checkNetworkStackPermission(mContext);
|
||||
|
||||
final ArrayList<NetworkState> result = Lists.newArrayList();
|
||||
for (Network network : getAllNetworks()) {
|
||||
@@ -1735,7 +1735,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
}
|
||||
enforceChangePermission();
|
||||
if (mProtectedNetworks.contains(networkType)) {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceConnectivityRestrictedNetworksPermission();
|
||||
}
|
||||
|
||||
InetAddress addr;
|
||||
@@ -2005,6 +2005,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
}
|
||||
|
||||
private void enforceNetworkFactoryPermission() {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.NETWORK_FACTORY,
|
||||
"ConnectivityService");
|
||||
}
|
||||
|
||||
private boolean checkSettingsPermission() {
|
||||
return checkAnyPermissionOf(
|
||||
android.Manifest.permission.NETWORK_SETTINGS,
|
||||
@@ -2024,18 +2030,19 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
"ConnectivityService");
|
||||
}
|
||||
|
||||
private void enforceConnectivityInternalPermission() {
|
||||
enforceAnyPermissionOf(
|
||||
android.Manifest.permission.CONNECTIVITY_INTERNAL,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
}
|
||||
|
||||
private void enforceControlAlwaysOnVpnPermission() {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.CONTROL_ALWAYS_ON_VPN,
|
||||
"ConnectivityService");
|
||||
}
|
||||
|
||||
private void enforceNetworkStackOrSettingsPermission() {
|
||||
enforceAnyPermissionOf(
|
||||
android.Manifest.permission.NETWORK_SETTINGS,
|
||||
android.Manifest.permission.NETWORK_STACK,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
}
|
||||
|
||||
private void enforceNetworkStackSettingsOrSetup() {
|
||||
enforceAnyPermissionOf(
|
||||
android.Manifest.permission.NETWORK_SETTINGS,
|
||||
@@ -2063,7 +2070,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
"ConnectivityService");
|
||||
return;
|
||||
} catch (SecurityException e) { /* fallback to ConnectivityInternalPermission */ }
|
||||
enforceConnectivityInternalPermission();
|
||||
// TODO: Remove this fallback check after all apps have declared
|
||||
// CONNECTIVITY_USE_RESTRICTED_NETWORKS.
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.CONNECTIVITY_INTERNAL,
|
||||
"ConnectivityService");
|
||||
}
|
||||
|
||||
private void enforceKeepalivePermission() {
|
||||
@@ -2072,7 +2083,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
// Public because it's used by mLockdownTracker.
|
||||
public void sendConnectedBroadcast(NetworkInfo info) {
|
||||
enforceConnectivityInternalPermission();
|
||||
NetworkStack.checkNetworkStackPermission(mContext);
|
||||
sendGeneralBroadcast(info, CONNECTIVITY_ACTION);
|
||||
}
|
||||
|
||||
@@ -3589,7 +3600,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public void startCaptivePortalApp(Network network) {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceNetworkStackOrSettingsPermission();
|
||||
mHandler.post(() -> {
|
||||
NetworkAgentInfo nai = getNetworkAgentInfoForNetwork(network);
|
||||
if (nai == null) return;
|
||||
@@ -4080,7 +4091,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public String[] getTetheredDhcpRanges() {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceSettingsPermission();
|
||||
return mTetheringManager.getTetheredDhcpRanges();
|
||||
}
|
||||
|
||||
@@ -4304,7 +4315,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public void setGlobalProxy(final ProxyInfo proxyProperties) {
|
||||
enforceConnectivityInternalPermission();
|
||||
NetworkStack.checkNetworkStackPermission(mContext);
|
||||
mProxyTracker.setGlobalProxy(proxyProperties);
|
||||
}
|
||||
|
||||
@@ -4843,7 +4854,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public String getMobileProvisioningUrl() {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceSettingsPermission();
|
||||
String url = getProvisioningUrlBaseFromFile();
|
||||
if (TextUtils.isEmpty(url)) {
|
||||
url = mContext.getResources().getString(R.string.mobile_provisioning_url);
|
||||
@@ -4869,7 +4880,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
@Override
|
||||
public void setProvisioningNotificationVisible(boolean visible, int networkType,
|
||||
String action) {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceSettingsPermission();
|
||||
if (!ConnectivityManager.isNetworkTypeValid(networkType)) {
|
||||
return;
|
||||
}
|
||||
@@ -5457,7 +5468,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public int registerNetworkFactory(Messenger messenger, String name) {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceNetworkFactoryPermission();
|
||||
NetworkFactoryInfo nfi = new NetworkFactoryInfo(name, messenger, new AsyncChannel(),
|
||||
NetworkFactory.SerialNumber.nextSerialNumber());
|
||||
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_FACTORY, nfi));
|
||||
@@ -5472,7 +5483,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public void unregisterNetworkFactory(Messenger messenger) {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceNetworkFactoryPermission();
|
||||
mHandler.sendMessage(mHandler.obtainMessage(EVENT_UNREGISTER_NETWORK_FACTORY, messenger));
|
||||
}
|
||||
|
||||
@@ -5571,7 +5582,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
public int registerNetworkAgent(Messenger messenger, NetworkInfo networkInfo,
|
||||
LinkProperties linkProperties, NetworkCapabilities networkCapabilities,
|
||||
int currentScore, NetworkMisc networkMisc, int factorySerialNumber) {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceNetworkFactoryPermission();
|
||||
|
||||
LinkProperties lp = new LinkProperties(linkProperties);
|
||||
lp.ensureDirectlyConnectedRoutes();
|
||||
@@ -7012,7 +7023,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public String getCaptivePortalServerUrl() {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceNetworkStackOrSettingsPermission();
|
||||
String settingUrl = mContext.getResources().getString(
|
||||
R.string.config_networkCaptivePortalServerUrl);
|
||||
|
||||
@@ -7065,7 +7076,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
@Override
|
||||
public void factoryReset() {
|
||||
enforceConnectivityInternalPermission();
|
||||
enforceSettingsPermission();
|
||||
|
||||
if (mUserManager.hasUserRestriction(UserManager.DISALLOW_NETWORK_RESET)) {
|
||||
return;
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package com.android.server.connectivity;
|
||||
|
||||
import static android.Manifest.permission.CHANGE_NETWORK_STATE;
|
||||
import static android.Manifest.permission.CONNECTIVITY_INTERNAL;
|
||||
import static android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS;
|
||||
import static android.Manifest.permission.INTERNET;
|
||||
import static android.Manifest.permission.NETWORK_STACK;
|
||||
@@ -25,6 +24,7 @@ import static android.Manifest.permission.UPDATE_DEVICE_STATS;
|
||||
import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED;
|
||||
import static android.content.pm.PackageManager.GET_PERMISSIONS;
|
||||
import static android.content.pm.PackageManager.MATCH_ANY_USER;
|
||||
import static android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK;
|
||||
import static android.os.Process.INVALID_UID;
|
||||
import static android.os.Process.SYSTEM_UID;
|
||||
|
||||
@@ -259,7 +259,8 @@ public class PermissionMonitor {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return hasPermission(app, CONNECTIVITY_INTERNAL)
|
||||
|
||||
return hasPermission(app, PERMISSION_MAINLINE_NETWORK_STACK)
|
||||
|| hasPermission(app, NETWORK_STACK)
|
||||
|| hasPermission(app, CONNECTIVITY_USE_RESTRICTED_NETWORKS);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user