Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01628ba1 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Set attributionTag for noteOp(WRITE_SETTINGS) calls

Test: atest FrameworksNetTests
Bug: 136595429
Change-Id: I33f787644c44d7b0e5ce17a433820cfcd985cdfb
Exempt-From-Owner-Approval: Merge from AOSP
parent e9b66ed5
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -9161,7 +9161,8 @@ package android.provider {
  }
  public final class Settings {
    method public static boolean checkAndNoteWriteSettingsOperation(@NonNull android.content.Context, int, @NonNull String, boolean);
    method @Deprecated public static boolean checkAndNoteWriteSettingsOperation(@NonNull android.content.Context, int, @NonNull String, boolean);
    method public static boolean checkAndNoteWriteSettingsOperation(@NonNull android.content.Context, int, @NonNull String, @Nullable String, boolean);
    field public static final String ACTION_ACCESSIBILITY_DETAILS_SETTINGS = "android.settings.ACCESSIBILITY_DETAILS_SETTINGS";
    field public static final String ACTION_BUGREPORT_HANDLER_SETTINGS = "android.settings.BUGREPORT_HANDLER_SETTINGS";
    field public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS = "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
+2 −0
Original line number Diff line number Diff line
@@ -345,6 +345,8 @@ interface IActivityManager {
    boolean isIntentSenderTargetedToPackage(in IIntentSender sender);
    @UnsupportedAppUsage
    void updatePersistentConfiguration(in Configuration values);
    void updatePersistentConfigurationWithAttribution(in Configuration values,
            String callingPackageName, String callingAttributionTag);
    @UnsupportedAppUsage
    long[] getProcessPss(in int[] pids);
    void showBootMessage(in CharSequence msg, boolean always);
+1 −1
Original line number Diff line number Diff line
@@ -367,7 +367,7 @@ public final class BluetoothPan implements BluetoothProfile {
        final IBluetoothPan service = getService();
        if (service != null && isEnabled()) {
            try {
                service.setBluetoothTethering(value, pkgName);
                service.setBluetoothTethering(value, pkgName, mContext.getAttributionTag());
            } catch (RemoteException e) {
                Log.e(TAG, "Stack:" + Log.getStackTraceString(new Throwable()));
            }
+50 −9
Original line number Diff line number Diff line
@@ -2043,12 +2043,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 mContext.getAttributionTag();
    }

    /**
     * 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
@@ -2239,14 +2248,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,
                callingAttributionTag, 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");

@@ -2260,11 +2285,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,
                callingAttributionTag, throwException);
    }

    /**
     * @deprecated - use getSystemService. This is a kludge to support static access in certain
     *               situations where a Context pointer is unavailable.
@@ -3705,7 +3744,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);
@@ -3981,7 +4021,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) {
+4 −3
Original line number Diff line number Diff line
@@ -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);

Loading