Set attributionTag for noteOp(WRITE_SETTINGS) calls
Test: atest FrameworksNetTests TetheringTests:TetheringServiceTest Bug: 136595429 Merged-In: I33f787644c44d7b0e5ce17a433820cfcd985cdfb Change-Id: Ic3d937e7bb5141798234ed5b2852c1f768e97495
This commit is contained in:
@@ -2044,12 +2044,21 @@ public class ConnectivityManager {
|
||||
public boolean requestRouteToHostAddress(int networkType, InetAddress hostAddress) {
|
||||
checkLegacyRoutingApiAccess();
|
||||
try {
|
||||
return mService.requestRouteToHostAddress(networkType, hostAddress.getAddress());
|
||||
return mService.requestRouteToHostAddress(networkType, hostAddress.getAddress(),
|
||||
mContext.getOpPackageName(), getAttributionTag());
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the context's attribution tag
|
||||
*/
|
||||
// TODO: Remove method and replace with direct call once R code is pushed to AOSP
|
||||
private @Nullable String getAttributionTag() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of the setting for background data usage. If false,
|
||||
* applications should not use the network if the application is not in the
|
||||
@@ -2240,14 +2249,30 @@ public class ConnectivityManager {
|
||||
* services.jar, possibly in com.android.server.net. */
|
||||
|
||||
/** {@hide} */
|
||||
public static final void enforceChangePermission(Context context) {
|
||||
public static final void enforceChangePermission(Context context,
|
||||
String callingPkg, String callingAttributionTag) {
|
||||
int uid = Binder.getCallingUid();
|
||||
Settings.checkAndNoteChangeNetworkStateOperation(context, uid, Settings
|
||||
.getPackageNameForUid(context, uid), true /* throwException */);
|
||||
checkAndNoteChangeNetworkStateOperation(context, uid, callingPkg,
|
||||
callingAttributionTag, true /* throwException */);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the package is a allowed to change the network state. This also accounts that such
|
||||
* an access happened.
|
||||
*
|
||||
* @return {@code true} iff the package is allowed to change the network state.
|
||||
*/
|
||||
// TODO: Remove method and replace with direct call once R code is pushed to AOSP
|
||||
private static boolean checkAndNoteChangeNetworkStateOperation(@NonNull Context context,
|
||||
int uid, @NonNull String callingPackage, @Nullable String callingAttributionTag,
|
||||
boolean throwException) {
|
||||
return Settings.checkAndNoteChangeNetworkStateOperation(context, uid, callingPackage,
|
||||
throwException);
|
||||
}
|
||||
|
||||
/** {@hide} */
|
||||
public static final void enforceTetherChangePermission(Context context, String callingPkg) {
|
||||
public static final void enforceTetherChangePermission(Context context, String callingPkg,
|
||||
String callingAttributionTag) {
|
||||
Preconditions.checkNotNull(context, "Context cannot be null");
|
||||
Preconditions.checkNotNull(callingPkg, "callingPkg cannot be null");
|
||||
|
||||
@@ -2261,11 +2286,25 @@ public class ConnectivityManager {
|
||||
int uid = Binder.getCallingUid();
|
||||
// If callingPkg's uid is not same as Binder.getCallingUid(),
|
||||
// AppOpsService throws SecurityException.
|
||||
Settings.checkAndNoteWriteSettingsOperation(context, uid, callingPkg,
|
||||
true /* throwException */);
|
||||
checkAndNoteWriteSettingsOperation(context, uid, callingPkg,
|
||||
callingAttributionTag, true /* throwException */);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the package is a allowed to write settings. This also accounts that such an access
|
||||
* happened.
|
||||
*
|
||||
* @return {@code true} iff the package is allowed to write settings.
|
||||
*/
|
||||
// TODO: Remove method and replace with direct call once R code is pushed to AOSP
|
||||
private static boolean checkAndNoteWriteSettingsOperation(@NonNull Context context, int uid,
|
||||
@NonNull String callingPackage, @Nullable String callingAttributionTag,
|
||||
boolean throwException) {
|
||||
return Settings.checkAndNoteWriteSettingsOperation(context, uid, callingPackage,
|
||||
throwException);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated - use getSystemService. This is a kludge to support static access in certain
|
||||
* situations where a Context pointer is unavailable.
|
||||
@@ -3706,7 +3745,8 @@ public class ConnectivityManager {
|
||||
need, messenger, binder, callingPackageName);
|
||||
} else {
|
||||
request = mService.requestNetwork(
|
||||
need, messenger, timeoutMs, binder, legacyType, callingPackageName);
|
||||
need, messenger, timeoutMs, binder, legacyType, callingPackageName,
|
||||
getAttributionTag());
|
||||
}
|
||||
if (request != null) {
|
||||
sCallbacks.put(request, callback);
|
||||
@@ -3982,7 +4022,8 @@ public class ConnectivityManager {
|
||||
checkPendingIntentNotNull(operation);
|
||||
try {
|
||||
mService.pendingRequestForNetwork(
|
||||
request.networkCapabilities, operation, mContext.getOpPackageName());
|
||||
request.networkCapabilities, operation, mContext.getOpPackageName(),
|
||||
getAttributionTag());
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
} catch (ServiceSpecificException e) {
|
||||
|
||||
@@ -77,7 +77,8 @@ interface IConnectivityManager
|
||||
NetworkQuotaInfo getActiveNetworkQuotaInfo();
|
||||
boolean isActiveNetworkMetered();
|
||||
|
||||
boolean requestRouteToHostAddress(int networkType, in byte[] hostAddress);
|
||||
boolean requestRouteToHostAddress(int networkType, in byte[] hostAddress,
|
||||
String callingPackageName, String callingAttributionTag);
|
||||
|
||||
@UnsupportedAppUsage(maxTargetSdk = 29,
|
||||
publicAlternatives = "Use {@code TetheringManager#getLastTetherError} as alternative")
|
||||
@@ -168,10 +169,10 @@ interface IConnectivityManager
|
||||
|
||||
NetworkRequest requestNetwork(in NetworkCapabilities networkCapabilities,
|
||||
in Messenger messenger, int timeoutSec, in IBinder binder, int legacy,
|
||||
String callingPackageName);
|
||||
String callingPackageName, String callingAttributionTag);
|
||||
|
||||
NetworkRequest pendingRequestForNetwork(in NetworkCapabilities networkCapabilities,
|
||||
in PendingIntent operation, String callingPackageName);
|
||||
in PendingIntent operation, String callingPackageName, String callingAttributionTag);
|
||||
|
||||
void releasePendingNetworkRequest(in PendingIntent operation);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user