Rename check*Permission* to has*Permission
The check*Permission methods are a bit error-prone because people can forget to check the return value and expect that they behave like the enforce* methods. This was pointed out before in some bugs. This change adds @CheckResult annotation to enforce linter warning and rename methods accordingly. Test: TH Fix: 279691948 Change-Id: Ibb0df6540fe0ed40289bb190b790130daaa2f763
This commit is contained in:
parent
d7773093ee
commit
71b5153898
8 changed files with 95 additions and 80 deletions
|
|
@ -128,7 +128,7 @@ public final class NetworkStatsAccess {
|
|||
|
||||
final int appId = UserHandle.getAppId(callingUid);
|
||||
|
||||
final boolean isNetworkStack = PermissionUtils.checkAnyPermissionOf(
|
||||
final boolean isNetworkStack = PermissionUtils.hasAnyPermissionOf(
|
||||
context, callingPid, callingUid, android.Manifest.permission.NETWORK_STACK,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
|
||||
|
|
|
|||
|
|
@ -2295,7 +2295,7 @@ public class NsdService extends INsdManager.Stub {
|
|||
permissionsList.add(DEVICE_POWER);
|
||||
}
|
||||
|
||||
if (PermissionUtils.checkAnyPermissionOf(context,
|
||||
if (PermissionUtils.hasAnyPermissionOf(context,
|
||||
permissionsList.toArray(new String[0]))) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -2492,7 +2492,7 @@ public class NsdService extends INsdManager.Stub {
|
|||
|
||||
@Override
|
||||
public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
|
||||
if (!PermissionUtils.checkDumpPermission(mContext, TAG, writer)) return;
|
||||
if (!PermissionUtils.hasDumpPermission(mContext, TAG, writer)) return;
|
||||
|
||||
final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
|
||||
// Dump state machine logs
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ package com.android.server.ethernet;
|
|||
import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_TEST;
|
||||
|
||||
import android.annotation.CheckResult;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
|
|
@ -72,8 +73,9 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
|
|||
methodName + " is only available on automotive devices.");
|
||||
}
|
||||
|
||||
private boolean checkUseRestrictedNetworksPermission() {
|
||||
return PermissionUtils.checkAnyPermissionOf(mContext,
|
||||
@CheckResult
|
||||
private boolean hasUseRestrictedNetworksPermission() {
|
||||
return PermissionUtils.hasAnyPermissionOf(mContext,
|
||||
android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS);
|
||||
}
|
||||
|
||||
|
|
@ -92,7 +94,7 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
|
|||
@Override
|
||||
public String[] getAvailableInterfaces() throws RemoteException {
|
||||
PermissionUtils.enforceAccessNetworkStatePermission(mContext, TAG);
|
||||
return mTracker.getClientModeInterfaces(checkUseRestrictedNetworksPermission());
|
||||
return mTracker.getClientModeInterfaces(hasUseRestrictedNetworksPermission());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -146,7 +148,7 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
|
|||
public void addListener(IEthernetServiceListener listener) throws RemoteException {
|
||||
Objects.requireNonNull(listener, "listener must not be null");
|
||||
PermissionUtils.enforceAccessNetworkStatePermission(mContext, TAG);
|
||||
mTracker.addListener(listener, checkUseRestrictedNetworksPermission());
|
||||
mTracker.addListener(listener, hasUseRestrictedNetworksPermission());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -187,7 +189,7 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
|
|||
@Override
|
||||
protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
|
||||
final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
|
||||
if (!PermissionUtils.checkDumpPermission(mContext, TAG, pw)) return;
|
||||
if (!PermissionUtils.hasDumpPermission(mContext, TAG, pw)) return;
|
||||
|
||||
pw.println("Current Ethernet state: ");
|
||||
pw.increaseIndent();
|
||||
|
|
|
|||
|
|
@ -1461,7 +1461,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||
|
||||
private int restrictFlagsForCaller(int flags, @Nullable String callingPackage) {
|
||||
// All non-privileged callers are not allowed to turn off POLL_ON_OPEN.
|
||||
final boolean isPrivileged = PermissionUtils.checkAnyPermissionOf(mContext,
|
||||
final boolean isPrivileged = PermissionUtils.hasAnyPermissionOf(mContext,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
|
||||
android.Manifest.permission.NETWORK_STACK);
|
||||
if (!isPrivileged) {
|
||||
|
|
@ -2667,7 +2667,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||
|
||||
@Override
|
||||
protected void dump(FileDescriptor fd, PrintWriter rawWriter, String[] args) {
|
||||
if (!PermissionUtils.checkDumpPermission(mContext, TAG, rawWriter)) return;
|
||||
if (!PermissionUtils.hasDumpPermission(mContext, TAG, rawWriter)) return;
|
||||
|
||||
long duration = DateUtils.DAY_IN_MILLIS;
|
||||
final HashSet<String> argSet = new HashSet<String>();
|
||||
|
|
|
|||
|
|
@ -108,15 +108,14 @@ import static com.android.net.module.util.BpfUtils.BPF_CGROUP_INET_EGRESS;
|
|||
import static com.android.net.module.util.BpfUtils.BPF_CGROUP_INET_INGRESS;
|
||||
import static com.android.net.module.util.BpfUtils.BPF_CGROUP_INET_SOCK_CREATE;
|
||||
import static com.android.net.module.util.NetworkMonitorUtils.isPrivateDnsValidationRequired;
|
||||
import static com.android.net.module.util.PermissionUtils.checkAnyPermissionOf;
|
||||
import static com.android.net.module.util.PermissionUtils.enforceAnyPermissionOf;
|
||||
import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPermission;
|
||||
import static com.android.net.module.util.PermissionUtils.enforceNetworkStackPermissionOr;
|
||||
import static com.android.net.module.util.PermissionUtils.hasAnyPermissionOf;
|
||||
import static com.android.server.ConnectivityStatsLog.CONNECTIVITY_STATE_SAMPLE;
|
||||
|
||||
import static java.util.Map.Entry;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.CheckResult;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SuppressLint;
|
||||
|
|
@ -351,7 +350,6 @@ import java.io.InterruptedIOException;
|
|||
import java.io.PrintWriter;
|
||||
import java.io.Writer;
|
||||
import java.net.Inet4Address;
|
||||
import java.net.Inet6Address;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketException;
|
||||
|
|
@ -2651,7 +2649,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
Objects.requireNonNull(packageName);
|
||||
Objects.requireNonNull(lp);
|
||||
enforceNetworkStackOrSettingsPermission();
|
||||
if (!checkAccessPermission(-1 /* pid */, uid)) {
|
||||
if (!hasAccessPermission(-1 /* pid */, uid)) {
|
||||
return null;
|
||||
}
|
||||
return linkPropertiesRestrictedForCallerPermissions(lp, -1 /* callerPid */, uid);
|
||||
|
|
@ -2687,7 +2685,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
Objects.requireNonNull(nc);
|
||||
Objects.requireNonNull(packageName);
|
||||
enforceNetworkStackOrSettingsPermission();
|
||||
if (!checkAccessPermission(-1 /* pid */, uid)) {
|
||||
if (!hasAccessPermission(-1 /* pid */, uid)) {
|
||||
return null;
|
||||
}
|
||||
return createWithLocationInfoSanitizedIfNecessaryWhenParceled(
|
||||
|
|
@ -2698,14 +2696,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
|
||||
private void redactUnderlyingNetworksForCapabilities(NetworkCapabilities nc, int pid, int uid) {
|
||||
if (nc.getUnderlyingNetworks() != null
|
||||
&& !checkNetworkFactoryOrSettingsPermission(pid, uid)) {
|
||||
&& !hasNetworkFactoryOrSettingsPermission(pid, uid)) {
|
||||
nc.setUnderlyingNetworks(null);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean canSeeAllowedUids(final int pid, final int uid, final int netOwnerUid) {
|
||||
return Process.SYSTEM_UID == uid
|
||||
|| checkAnyPermissionOf(mContext, pid, uid,
|
||||
|| hasAnyPermissionOf(mContext, pid, uid,
|
||||
android.Manifest.permission.NETWORK_FACTORY);
|
||||
}
|
||||
|
||||
|
|
@ -2718,14 +2716,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
// it happens for some reason (e.g. the package is uninstalled while CS is trying to
|
||||
// send the callback) it would crash the system server with NPE.
|
||||
final NetworkCapabilities newNc = new NetworkCapabilities(nc);
|
||||
if (!checkSettingsPermission(callerPid, callerUid)) {
|
||||
if (!hasSettingsPermission(callerPid, callerUid)) {
|
||||
newNc.setUids(null);
|
||||
newNc.setSSID(null);
|
||||
}
|
||||
if (newNc.getNetworkSpecifier() != null) {
|
||||
newNc.setNetworkSpecifier(newNc.getNetworkSpecifier().redact());
|
||||
}
|
||||
if (!checkAnyPermissionOf(mContext, callerPid, callerUid,
|
||||
if (!hasAnyPermissionOf(mContext, callerPid, callerUid,
|
||||
android.Manifest.permission.NETWORK_STACK,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK)) {
|
||||
newNc.setAdministratorUids(new int[0]);
|
||||
|
|
@ -2793,11 +2791,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
* Returns whether the app holds local mac address permission or not (might return cached
|
||||
* result if the permission was already checked before).
|
||||
*/
|
||||
@CheckResult
|
||||
public boolean hasLocalMacAddressPermission() {
|
||||
if (mHasLocalMacAddressPermission == null) {
|
||||
// If there is no cached result, perform the check now.
|
||||
mHasLocalMacAddressPermission =
|
||||
checkLocalMacAddressPermission(mCallingPid, mCallingUid);
|
||||
mHasLocalMacAddressPermission = ConnectivityService.this
|
||||
.hasLocalMacAddressPermission(mCallingPid, mCallingUid);
|
||||
}
|
||||
return mHasLocalMacAddressPermission;
|
||||
}
|
||||
|
|
@ -2806,10 +2805,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
* Returns whether the app holds settings permission or not (might return cached
|
||||
* result if the permission was already checked before).
|
||||
*/
|
||||
@CheckResult
|
||||
public boolean hasSettingsPermission() {
|
||||
if (mHasSettingsPermission == null) {
|
||||
// If there is no cached result, perform the check now.
|
||||
mHasSettingsPermission = checkSettingsPermission(mCallingPid, mCallingUid);
|
||||
mHasSettingsPermission =
|
||||
ConnectivityService.this.hasSettingsPermission(mCallingPid, mCallingUid);
|
||||
}
|
||||
return mHasSettingsPermission;
|
||||
}
|
||||
|
|
@ -2913,7 +2914,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
return new LinkProperties(lp);
|
||||
}
|
||||
|
||||
if (checkSettingsPermission(callerPid, callerUid)) {
|
||||
if (hasSettingsPermission(callerPid, callerUid)) {
|
||||
return new LinkProperties(lp, true /* parcelSensitiveFields */);
|
||||
}
|
||||
|
||||
|
|
@ -2929,7 +2930,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
int callerUid, String callerPackageName) {
|
||||
// There is no need to track the effective UID of the request here. If the caller
|
||||
// lacks the settings permission, the effective UID is the same as the calling ID.
|
||||
if (!checkSettingsPermission()) {
|
||||
if (!hasSettingsPermission()) {
|
||||
// Unprivileged apps can only pass in null or their own UID.
|
||||
if (nc.getUids() == null) {
|
||||
// If the caller passes in null, the callback will also match networks that do not
|
||||
|
|
@ -3383,7 +3384,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
"ConnectivityService");
|
||||
}
|
||||
|
||||
private boolean checkAccessPermission(int pid, int uid) {
|
||||
@CheckResult
|
||||
private boolean hasAccessPermission(int pid, int uid) {
|
||||
return mContext.checkPermission(android.Manifest.permission.ACCESS_NETWORK_STATE, pid, uid)
|
||||
== PERMISSION_GRANTED;
|
||||
}
|
||||
|
|
@ -3469,7 +3471,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
}
|
||||
|
||||
private boolean checkNetworkFactoryOrSettingsPermission(int pid, int uid) {
|
||||
@CheckResult
|
||||
private boolean hasNetworkFactoryOrSettingsPermission(int pid, int uid) {
|
||||
return PERMISSION_GRANTED == mContext.checkPermission(
|
||||
android.Manifest.permission.NETWORK_FACTORY, pid, uid)
|
||||
|| PERMISSION_GRANTED == mContext.checkPermission(
|
||||
|
|
@ -3479,13 +3482,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
|| UserHandle.getAppId(uid) == Process.BLUETOOTH_UID;
|
||||
}
|
||||
|
||||
private boolean checkSettingsPermission() {
|
||||
return PermissionUtils.checkAnyPermissionOf(mContext,
|
||||
android.Manifest.permission.NETWORK_SETTINGS,
|
||||
@CheckResult
|
||||
private boolean hasSettingsPermission() {
|
||||
return hasAnyPermissionOf(mContext, android.Manifest.permission.NETWORK_SETTINGS,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
}
|
||||
|
||||
private boolean checkSettingsPermission(int pid, int uid) {
|
||||
@CheckResult
|
||||
private boolean hasSettingsPermission(int pid, int uid) {
|
||||
return PERMISSION_GRANTED == mContext.checkPermission(
|
||||
android.Manifest.permission.NETWORK_SETTINGS, pid, uid)
|
||||
|| PERMISSION_GRANTED == mContext.checkPermission(
|
||||
|
|
@ -3522,33 +3526,36 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
"ConnectivityService");
|
||||
}
|
||||
|
||||
private boolean checkNetworkStackPermission() {
|
||||
return PermissionUtils.checkAnyPermissionOf(mContext,
|
||||
android.Manifest.permission.NETWORK_STACK,
|
||||
@CheckResult
|
||||
private boolean hasNetworkStackPermission() {
|
||||
return hasAnyPermissionOf(mContext, android.Manifest.permission.NETWORK_STACK,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
}
|
||||
|
||||
private boolean checkNetworkStackPermission(int pid, int uid) {
|
||||
return checkAnyPermissionOf(mContext, pid, uid,
|
||||
android.Manifest.permission.NETWORK_STACK,
|
||||
@CheckResult
|
||||
private boolean hasNetworkStackPermission(int pid, int uid) {
|
||||
return hasAnyPermissionOf(mContext, pid, uid, android.Manifest.permission.NETWORK_STACK,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK);
|
||||
}
|
||||
|
||||
private boolean checkSystemBarServicePermission(int pid, int uid) {
|
||||
return checkAnyPermissionOf(mContext, pid, uid,
|
||||
@CheckResult
|
||||
private boolean hasSystemBarServicePermission(int pid, int uid) {
|
||||
return hasAnyPermissionOf(mContext, pid, uid,
|
||||
android.Manifest.permission.STATUS_BAR_SERVICE);
|
||||
}
|
||||
|
||||
private boolean checkNetworkSignalStrengthWakeupPermission(int pid, int uid) {
|
||||
return checkAnyPermissionOf(mContext, pid, uid,
|
||||
@CheckResult
|
||||
private boolean hasNetworkSignalStrengthWakeupPermission(int pid, int uid) {
|
||||
return hasAnyPermissionOf(mContext, pid, uid,
|
||||
android.Manifest.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP,
|
||||
NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK,
|
||||
android.Manifest.permission.NETWORK_SETTINGS);
|
||||
}
|
||||
|
||||
private boolean checkConnectivityRestrictedNetworksPermission(int callingUid,
|
||||
@CheckResult
|
||||
private boolean hasConnectivityRestrictedNetworksPermission(int callingUid,
|
||||
boolean checkUidsAllowedList) {
|
||||
if (PermissionUtils.checkAnyPermissionOf(mContext,
|
||||
if (hasAnyPermissionOf(mContext,
|
||||
android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS)) {
|
||||
return true;
|
||||
}
|
||||
|
|
@ -3556,8 +3563,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
// fallback to ConnectivityInternalPermission
|
||||
// TODO: Remove this fallback check after all apps have declared
|
||||
// CONNECTIVITY_USE_RESTRICTED_NETWORKS.
|
||||
if (PermissionUtils.checkAnyPermissionOf(mContext,
|
||||
android.Manifest.permission.CONNECTIVITY_INTERNAL)) {
|
||||
if (hasAnyPermissionOf(mContext, android.Manifest.permission.CONNECTIVITY_INTERNAL)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -3571,7 +3577,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
|
||||
private void enforceConnectivityRestrictedNetworksPermission(boolean checkUidsAllowedList) {
|
||||
final int callingUid = mDeps.getCallingUid();
|
||||
if (!checkConnectivityRestrictedNetworksPermission(callingUid, checkUidsAllowedList)) {
|
||||
if (!hasConnectivityRestrictedNetworksPermission(callingUid, checkUidsAllowedList)) {
|
||||
throw new SecurityException("ConnectivityService: user " + callingUid
|
||||
+ " has no permission to access restricted network.");
|
||||
}
|
||||
|
|
@ -3581,7 +3587,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
mContext.enforceCallingOrSelfPermission(KeepaliveTracker.PERMISSION, "ConnectivityService");
|
||||
}
|
||||
|
||||
private boolean checkLocalMacAddressPermission(int pid, int uid) {
|
||||
@CheckResult
|
||||
private boolean hasLocalMacAddressPermission(int pid, int uid) {
|
||||
return PERMISSION_GRANTED == mContext.checkPermission(
|
||||
Manifest.permission.LOCAL_MAC_ADDRESS, pid, uid);
|
||||
}
|
||||
|
|
@ -3875,12 +3882,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
@Override
|
||||
protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter writer,
|
||||
@Nullable String[] args) {
|
||||
if (!checkDumpPermission(mContext, TAG, writer)) return;
|
||||
if (!hasDumpPermission(mContext, TAG, writer)) return;
|
||||
|
||||
mPriorityDumper.dump(fd, writer, args);
|
||||
}
|
||||
|
||||
private boolean checkDumpPermission(Context context, String tag, PrintWriter pw) {
|
||||
@CheckResult
|
||||
private boolean hasDumpPermission(Context context, String tag, PrintWriter pw) {
|
||||
if (context.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
pw.println("Permission Denial: can't dump " + tag + " from from pid="
|
||||
|
|
@ -5697,7 +5705,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
}
|
||||
|
||||
private RequestInfoPerUidCounter getRequestCounter(NetworkRequestInfo nri) {
|
||||
return checkAnyPermissionOf(mContext,
|
||||
return hasAnyPermissionOf(mContext,
|
||||
nri.mPid, nri.mUid, NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK)
|
||||
? mSystemNetworkRequestCounter : mNetworkRequestCounter;
|
||||
}
|
||||
|
|
@ -5921,7 +5929,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
if (nm == null) return;
|
||||
|
||||
if (request == CaptivePortal.APP_REQUEST_REEVALUATION_REQUIRED) {
|
||||
checkNetworkStackPermission();
|
||||
hasNetworkStackPermission();
|
||||
nm.forceReevaluation(mDeps.getCallingUid());
|
||||
}
|
||||
}
|
||||
|
|
@ -5951,7 +5959,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
* @see MultinetworkPolicyTracker#getAvoidBadWifi()
|
||||
*/
|
||||
public boolean shouldAvoidBadWifi() {
|
||||
if (!checkNetworkStackPermission()) {
|
||||
if (!hasNetworkStackPermission()) {
|
||||
throw new SecurityException("avoidBadWifi requires NETWORK_STACK permission");
|
||||
}
|
||||
return avoidBadWifi();
|
||||
|
|
@ -7471,12 +7479,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
// specific SSID/SignalStrength, or the calling app has permission to do so.
|
||||
private void ensureSufficientPermissionsForRequest(NetworkCapabilities nc,
|
||||
int callerPid, int callerUid, String callerPackageName) {
|
||||
if (null != nc.getSsid() && !checkSettingsPermission(callerPid, callerUid)) {
|
||||
if (null != nc.getSsid() && !hasSettingsPermission(callerPid, callerUid)) {
|
||||
throw new SecurityException("Insufficient permissions to request a specific SSID");
|
||||
}
|
||||
|
||||
if (nc.hasSignalStrength()
|
||||
&& !checkNetworkSignalStrengthWakeupPermission(callerPid, callerUid)) {
|
||||
&& !hasNetworkSignalStrengthWakeupPermission(callerPid, callerUid)) {
|
||||
throw new SecurityException(
|
||||
"Insufficient permissions to request a specific signal strength");
|
||||
}
|
||||
|
|
@ -7574,7 +7582,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
int reqTypeInt, Messenger messenger, int timeoutMs, final IBinder binder,
|
||||
int legacyType, int callbackFlags, @NonNull String callingPackageName,
|
||||
@Nullable String callingAttributionTag) {
|
||||
if (legacyType != TYPE_NONE && !checkNetworkStackPermission()) {
|
||||
if (legacyType != TYPE_NONE && !hasNetworkStackPermission()) {
|
||||
if (isTargetSdkAtleast(Build.VERSION_CODES.M, mDeps.getCallingUid(),
|
||||
callingPackageName)) {
|
||||
throw new SecurityException("Insufficient permissions to specify legacy type");
|
||||
|
|
@ -11324,7 +11332,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
|
||||
// Connection owner UIDs are visible only to the network stack and to the VpnService-based
|
||||
// VPN, if any, that applies to the UID that owns the connection.
|
||||
if (checkNetworkStackPermission()) return uid;
|
||||
if (hasNetworkStackPermission()) return uid;
|
||||
|
||||
final NetworkAgentInfo vpn = getVpnForUid(uid);
|
||||
if (vpn == null || getVpnType(vpn) != VpnManager.TYPE_VPN_SERVICE
|
||||
|
|
@ -11584,7 +11592,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
if (report == null) {
|
||||
continue;
|
||||
}
|
||||
if (!checkConnectivityDiagnosticsPermissions(
|
||||
if (!hasConnectivityDiagnosticsPermissions(
|
||||
nri.mPid, nri.mUid, nai, cbInfo.mCallingPackageName)) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -11747,7 +11755,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
continue;
|
||||
}
|
||||
|
||||
if (!checkConnectivityDiagnosticsPermissions(
|
||||
if (!hasConnectivityDiagnosticsPermissions(
|
||||
nri.mPid, nri.mUid, nai, cbInfo.mCallingPackageName)) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -11791,14 +11799,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
return false;
|
||||
}
|
||||
|
||||
@CheckResult
|
||||
@VisibleForTesting
|
||||
boolean checkConnectivityDiagnosticsPermissions(
|
||||
boolean hasConnectivityDiagnosticsPermissions(
|
||||
int callbackPid, int callbackUid, NetworkAgentInfo nai, String callbackPackageName) {
|
||||
if (checkNetworkStackPermission(callbackPid, callbackUid)) {
|
||||
if (hasNetworkStackPermission(callbackPid, callbackUid)) {
|
||||
return true;
|
||||
}
|
||||
if (mAllowSysUiConnectivityReports
|
||||
&& checkSystemBarServicePermission(callbackPid, callbackUid)) {
|
||||
&& hasSystemBarServicePermission(callbackPid, callbackUid)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED;
|
|||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
import static android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK;
|
||||
|
||||
import android.annotation.CheckResult;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.content.Context;
|
||||
|
|
@ -45,8 +46,9 @@ public final class PermissionUtils {
|
|||
/**
|
||||
* Return true if the context has one of given permission.
|
||||
*/
|
||||
public static boolean checkAnyPermissionOf(@NonNull Context context,
|
||||
@NonNull String... permissions) {
|
||||
@CheckResult
|
||||
public static boolean hasAnyPermissionOf(@NonNull Context context,
|
||||
@NonNull String... permissions) {
|
||||
for (String permission : permissions) {
|
||||
if (context.checkCallingOrSelfPermission(permission) == PERMISSION_GRANTED) {
|
||||
return true;
|
||||
|
|
@ -56,11 +58,12 @@ public final class PermissionUtils {
|
|||
}
|
||||
|
||||
/**
|
||||
* Return true if the context has one of give permission that is allowed
|
||||
* Return true if the context has one of given permission that is allowed
|
||||
* for a particular process and user ID running in the system.
|
||||
*/
|
||||
public static boolean checkAnyPermissionOf(@NonNull Context context,
|
||||
int pid, int uid, @NonNull String... permissions) {
|
||||
@CheckResult
|
||||
public static boolean hasAnyPermissionOf(@NonNull Context context,
|
||||
int pid, int uid, @NonNull String... permissions) {
|
||||
for (String permission : permissions) {
|
||||
if (context.checkPermission(permission, pid, uid) == PERMISSION_GRANTED) {
|
||||
return true;
|
||||
|
|
@ -74,7 +77,7 @@ public final class PermissionUtils {
|
|||
*/
|
||||
public static void enforceAnyPermissionOf(@NonNull Context context,
|
||||
@NonNull String... permissions) {
|
||||
if (!checkAnyPermissionOf(context, permissions)) {
|
||||
if (!hasAnyPermissionOf(context, permissions)) {
|
||||
throw new SecurityException("Requires one of the following permissions: "
|
||||
+ String.join(", ", permissions) + ".");
|
||||
}
|
||||
|
|
@ -133,7 +136,8 @@ public final class PermissionUtils {
|
|||
/**
|
||||
* Return true if the context has DUMP permission.
|
||||
*/
|
||||
public static boolean checkDumpPermission(Context context, String tag, PrintWriter pw) {
|
||||
@CheckResult
|
||||
public static boolean hasDumpPermission(Context context, String tag, PrintWriter pw) {
|
||||
if (context.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
|
||||
!= PERMISSION_GRANTED) {
|
||||
pw.println("Permission Denial: can't dump " + tag + " from from pid="
|
||||
|
|
|
|||
|
|
@ -25,12 +25,12 @@ import android.content.pm.PackageManager.PERMISSION_GRANTED
|
|||
import android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK
|
||||
import androidx.test.filters.SmallTest
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import com.android.net.module.util.PermissionUtils.checkAnyPermissionOf
|
||||
import com.android.net.module.util.PermissionUtils.enforceAnyPermissionOf
|
||||
import com.android.net.module.util.PermissionUtils.enforceNetworkStackPermission
|
||||
import com.android.net.module.util.PermissionUtils.enforceNetworkStackPermissionOr
|
||||
import com.android.net.module.util.PermissionUtils.enforcePackageNameMatchesUid
|
||||
import com.android.net.module.util.PermissionUtils.enforceSystemFeature
|
||||
import com.android.net.module.util.PermissionUtils.hasAnyPermissionOf
|
||||
import com.android.testutils.DevSdkIgnoreRule
|
||||
import com.android.testutils.DevSdkIgnoreRunner
|
||||
import kotlin.test.assertEquals
|
||||
|
|
@ -78,18 +78,18 @@ class PermissionUtilsTest {
|
|||
.checkCallingOrSelfPermission(TEST_PERMISSION1)
|
||||
doReturn(PERMISSION_DENIED).`when`(mockContext)
|
||||
.checkCallingOrSelfPermission(TEST_PERMISSION2)
|
||||
assertTrue(checkAnyPermissionOf(mockContext, TEST_PERMISSION1, TEST_PERMISSION2))
|
||||
assertTrue(hasAnyPermissionOf(mockContext, TEST_PERMISSION1, TEST_PERMISSION2))
|
||||
enforceAnyPermissionOf(mockContext, TEST_PERMISSION1, TEST_PERMISSION2)
|
||||
|
||||
doReturn(PERMISSION_DENIED).`when`(mockContext)
|
||||
.checkCallingOrSelfPermission(TEST_PERMISSION1)
|
||||
doReturn(PERMISSION_GRANTED).`when`(mockContext)
|
||||
.checkCallingOrSelfPermission(TEST_PERMISSION2)
|
||||
assertTrue(checkAnyPermissionOf(mockContext, TEST_PERMISSION1, TEST_PERMISSION2))
|
||||
assertTrue(hasAnyPermissionOf(mockContext, TEST_PERMISSION1, TEST_PERMISSION2))
|
||||
enforceAnyPermissionOf(mockContext, TEST_PERMISSION1, TEST_PERMISSION2)
|
||||
|
||||
doReturn(PERMISSION_DENIED).`when`(mockContext).checkCallingOrSelfPermission(any())
|
||||
assertFalse(checkAnyPermissionOf(mockContext, TEST_PERMISSION1, TEST_PERMISSION2))
|
||||
assertFalse(hasAnyPermissionOf(mockContext, TEST_PERMISSION1, TEST_PERMISSION2))
|
||||
assertFailsWith<SecurityException>("Expect fail but permission granted.") {
|
||||
enforceAnyPermissionOf(mockContext, TEST_PERMISSION1, TEST_PERMISSION2)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12929,7 +12929,7 @@ public class ConnectivityServiceTest {
|
|||
mServiceContext.setPermission(NETWORK_STACK, PERMISSION_GRANTED);
|
||||
assertTrue(
|
||||
"NetworkStack permission not applied",
|
||||
mService.checkConnectivityDiagnosticsPermissions(
|
||||
mService.hasConnectivityDiagnosticsPermissions(
|
||||
Process.myPid(), Process.myUid(), naiWithoutUid,
|
||||
mContext.getOpPackageName()));
|
||||
}
|
||||
|
|
@ -12941,7 +12941,7 @@ public class ConnectivityServiceTest {
|
|||
mServiceContext.setPermission(STATUS_BAR_SERVICE, PERMISSION_GRANTED);
|
||||
assertTrue(
|
||||
"SysUi permission (STATUS_BAR_SERVICE) not applied",
|
||||
mService.checkConnectivityDiagnosticsPermissions(
|
||||
mService.hasConnectivityDiagnosticsPermissions(
|
||||
Process.myPid(), Process.myUid(), naiWithoutUid,
|
||||
mContext.getOpPackageName()));
|
||||
}
|
||||
|
|
@ -12958,7 +12958,7 @@ public class ConnectivityServiceTest {
|
|||
|
||||
assertFalse(
|
||||
"Mismatched uid/package name should not pass the location permission check",
|
||||
mService.checkConnectivityDiagnosticsPermissions(
|
||||
mService.hasConnectivityDiagnosticsPermissions(
|
||||
Process.myPid() + 1, wrongUid, naiWithUid, mContext.getOpPackageName()));
|
||||
}
|
||||
|
||||
|
|
@ -12969,7 +12969,7 @@ public class ConnectivityServiceTest {
|
|||
assertEquals(
|
||||
"Unexpected ConnDiags permission",
|
||||
expectPermission,
|
||||
mService.checkConnectivityDiagnosticsPermissions(
|
||||
mService.hasConnectivityDiagnosticsPermissions(
|
||||
Process.myPid(), Process.myUid(), info, mContext.getOpPackageName()));
|
||||
}
|
||||
|
||||
|
|
@ -13011,7 +13011,7 @@ public class ConnectivityServiceTest {
|
|||
waitForIdle();
|
||||
assertTrue(
|
||||
"Active VPN permission not applied",
|
||||
mService.checkConnectivityDiagnosticsPermissions(
|
||||
mService.hasConnectivityDiagnosticsPermissions(
|
||||
Process.myPid(), Process.myUid(), naiWithoutUid,
|
||||
mContext.getOpPackageName()));
|
||||
|
||||
|
|
@ -13019,7 +13019,7 @@ public class ConnectivityServiceTest {
|
|||
waitForIdle();
|
||||
assertFalse(
|
||||
"VPN shouldn't receive callback on non-underlying network",
|
||||
mService.checkConnectivityDiagnosticsPermissions(
|
||||
mService.hasConnectivityDiagnosticsPermissions(
|
||||
Process.myPid(), Process.myUid(), naiWithoutUid,
|
||||
mContext.getOpPackageName()));
|
||||
}
|
||||
|
|
@ -13036,7 +13036,7 @@ public class ConnectivityServiceTest {
|
|||
|
||||
assertTrue(
|
||||
"NetworkCapabilities administrator uid permission not applied",
|
||||
mService.checkConnectivityDiagnosticsPermissions(
|
||||
mService.hasConnectivityDiagnosticsPermissions(
|
||||
Process.myPid(), Process.myUid(), naiWithUid, mContext.getOpPackageName()));
|
||||
}
|
||||
|
||||
|
|
@ -13054,7 +13054,7 @@ public class ConnectivityServiceTest {
|
|||
// Use wrong pid and uid
|
||||
assertFalse(
|
||||
"Permissions allowed when they shouldn't be granted",
|
||||
mService.checkConnectivityDiagnosticsPermissions(
|
||||
mService.hasConnectivityDiagnosticsPermissions(
|
||||
Process.myPid() + 1, Process.myUid() + 1, naiWithUid,
|
||||
mContext.getOpPackageName()));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue