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

Commit 9e2b0200 authored by Manjeet Rulhania's avatar Manjeet Rulhania Committed by Android (Google) Code Review
Browse files

Merge "Add device support in attribution source validation" into main

parents 252fbd83 cebd97c0
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -9694,6 +9694,7 @@ package android.content {
    method public int describeContents();
    method public void enforceCallingUid();
    method @Nullable public String getAttributionTag();
    method public int getDeviceId();
    method @Nullable public android.content.AttributionSource getNext();
    method @Nullable public String getPackageName();
    method public int getPid();
@@ -9709,6 +9710,7 @@ package android.content {
    ctor public AttributionSource.Builder(@NonNull android.content.AttributionSource);
    method @NonNull public android.content.AttributionSource build();
    method @NonNull public android.content.AttributionSource.Builder setAttributionTag(@Nullable String);
    method @NonNull public android.content.AttributionSource.Builder setDeviceId(int);
    method @Deprecated @NonNull public android.content.AttributionSource.Builder setNext(@Nullable android.content.AttributionSource);
    method @NonNull public android.content.AttributionSource.Builder setNextAttributionSource(@NonNull android.content.AttributionSource);
    method @NonNull public android.content.AttributionSource.Builder setPackageName(@Nullable String);
+1 −0
Original line number Diff line number Diff line
@@ -850,6 +850,7 @@ package android.content {
    ctor public AttributionSource(int, @Nullable String, @Nullable String, @NonNull android.os.IBinder);
    ctor public AttributionSource(int, @Nullable String, @Nullable String, @Nullable java.util.Set<java.lang.String>, @Nullable android.content.AttributionSource);
    ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], @Nullable android.content.AttributionSource);
    ctor public AttributionSource(int, int, @Nullable String, @Nullable String, @NonNull android.os.IBinder, @Nullable String[], int, @Nullable android.content.AttributionSource);
    method public void enforceCallingPid();
  }

+1 −1
Original line number Diff line number Diff line
@@ -3465,7 +3465,7 @@ class ContextImpl extends Context {
        AttributionSource attributionSource = new AttributionSource(Process.myUid(),
                Process.myPid(), mOpPackageName, attributionTag,
                (renouncedPermissions != null) ? renouncedPermissions.toArray(new String[0]) : null,
                nextAttributionSource);
                getDeviceId(), nextAttributionSource);
        // If we want to access protected data on behalf of another app we need to
        // tell the OS that we opt in to participate in the attribution chain.
        if (nextAttributionSource != null) {
+53 −10
Original line number Diff line number Diff line
@@ -115,14 +115,14 @@ public final class AttributionSource implements Parcelable {
    public AttributionSource(int uid, @Nullable String packageName,
            @Nullable String attributionTag, @NonNull IBinder token) {
        this(uid, Process.INVALID_PID, packageName, attributionTag, token,
                /*renouncedPermissions*/ null, /*next*/ null);
                /*renouncedPermissions*/ null, Context.DEVICE_ID_DEFAULT, /*next*/ null);
    }

    /** @hide */
    public AttributionSource(int uid, int pid, @Nullable String packageName,
            @Nullable String attributionTag, @NonNull IBinder token) {
        this(uid, pid, packageName, attributionTag, token, /*renouncedPermissions*/ null,
                /*next*/ null);
                Context.DEVICE_ID_DEFAULT, /*next*/ null);
    }

    /** @hide */
@@ -132,21 +132,23 @@ public final class AttributionSource implements Parcelable {
            @Nullable AttributionSource next) {
        this(uid, Process.INVALID_PID, packageName, attributionTag, sDefaultToken,
                (renouncedPermissions != null)
                ? renouncedPermissions.toArray(new String[0]) : null, /*next*/ next);
                ? renouncedPermissions.toArray(new String[0]) : null, Context.DEVICE_ID_DEFAULT,
                /*next*/ next);
    }

    /** @hide */
    public AttributionSource(@NonNull AttributionSource current, @Nullable AttributionSource next) {
        this(current.getUid(), current.getPid(), current.getPackageName(),
                current.getAttributionTag(), current.getToken(),
                current.mAttributionSourceState.renouncedPermissions, next);
                current.mAttributionSourceState.renouncedPermissions, current.getDeviceId(), next);
    }

    /** @hide */
    public AttributionSource(int uid, int pid, @Nullable String packageName,
            @Nullable String attributionTag, @Nullable String[] renouncedPermissions,
            @Nullable String attributionTag, @Nullable String[] renouncedPermissions, int deviceId,
            @Nullable AttributionSource next) {
        this(uid, pid, packageName, attributionTag, sDefaultToken, renouncedPermissions, next);
        this(uid, pid, packageName, attributionTag, sDefaultToken, renouncedPermissions, deviceId,
                next);
    }

    /** @hide */
@@ -155,6 +157,16 @@ public final class AttributionSource implements Parcelable {
            @Nullable String attributionTag, @NonNull IBinder token,
            @Nullable String[] renouncedPermissions,
            @Nullable AttributionSource next) {
        this(uid, pid, packageName, attributionTag, token, renouncedPermissions,
                Context.DEVICE_ID_DEFAULT, next);
    }

    /** @hide */
    @TestApi
    public AttributionSource(int uid, int pid, @Nullable String packageName,
            @Nullable String attributionTag, @NonNull IBinder token,
            @Nullable String[] renouncedPermissions,
            int deviceId, @Nullable AttributionSource next) {
        mAttributionSourceState = new AttributionSourceState();
        mAttributionSourceState.uid = uid;
        mAttributionSourceState.pid = pid;
@@ -162,6 +174,7 @@ public final class AttributionSource implements Parcelable {
        mAttributionSourceState.packageName = packageName;
        mAttributionSourceState.attributionTag = attributionTag;
        mAttributionSourceState.renouncedPermissions = renouncedPermissions;
        mAttributionSourceState.deviceId = deviceId;
        mAttributionSourceState.next = (next != null) ? new AttributionSourceState[]
                {next.mAttributionSourceState} : new AttributionSourceState[0];
    }
@@ -197,25 +210,31 @@ public final class AttributionSource implements Parcelable {
    /** @hide */
    public AttributionSource withNextAttributionSource(@Nullable AttributionSource next) {
        return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(),
                getToken(), mAttributionSourceState.renouncedPermissions, next);
                getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), next);
    }

    /** @hide */
    public AttributionSource withPackageName(@Nullable String packageName) {
        return new AttributionSource(getUid(), getPid(), packageName, getAttributionTag(),
               getToken(), mAttributionSourceState.renouncedPermissions, getNext());
               getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext());
    }

    /** @hide */
    public AttributionSource withToken(@NonNull Binder token) {
        return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(),
                token, mAttributionSourceState.renouncedPermissions, getNext());
                token, mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext());
    }

    /** @hide */
    public AttributionSource withPid(int pid) {
        return new AttributionSource(getUid(), pid, getPackageName(), getAttributionTag(),
                getToken(), mAttributionSourceState.renouncedPermissions, getNext());
                getToken(), mAttributionSourceState.renouncedPermissions, getDeviceId(), getNext());
    }

    /** @hide */
    public AttributionSource withDeviceId(int deviceId) {
        return new AttributionSource(getUid(), getPid(), getPackageName(), getAttributionTag(),
                getToken(), mAttributionSourceState.renouncedPermissions, deviceId, getNext());
    }

    /** @hide */
@@ -259,6 +278,7 @@ public final class AttributionSource implements Parcelable {
        try {
            return new AttributionSource.Builder(uid)
                .setPid(Process.myPid())
                .setDeviceId(Context.DEVICE_ID_DEFAULT)
                .setPackageName(AppGlobals.getPackageManager().getPackagesForUid(uid)[0])
                .build();
        } catch (Exception ignored) {
@@ -496,6 +516,13 @@ public final class AttributionSource implements Parcelable {
        return mAttributionSourceState.attributionTag;
    }

    /**
     * The device ID for which permissions are checked.
     */
    public int getDeviceId() {
        return mAttributionSourceState.deviceId;
    }

    /**
     * Unique token for that source.
     *
@@ -661,6 +688,19 @@ public final class AttributionSource implements Parcelable {
            return this;
        }

        /**
         * Set the device ID for this attribution source, permission check would happen
         * against this device ID.
         *
         * @return the builder
         */
        public @NonNull Builder setDeviceId(int deviceId) {
            checkNotUsed();
            mBuilderFieldsSet |= 0x12;
            mAttributionSourceState.deviceId = deviceId;
            return this;
        }

        /**
         * The next app to receive the permission protected data.
         *
@@ -703,6 +743,9 @@ public final class AttributionSource implements Parcelable {
            if ((mBuilderFieldsSet & 0x10) == 0) {
                mAttributionSourceState.renouncedPermissions = null;
            }
            if ((mBuilderFieldsSet & 0x12) == 0) {
                mAttributionSourceState.deviceId = Context.DEVICE_ID_DEFAULT;
            }
            if ((mBuilderFieldsSet & 0x20) == 0) {
                mAttributionSourceState.next = null;
            }
+6 −3
Original line number Diff line number Diff line
@@ -19915,7 +19915,8 @@ public class ActivityManagerService extends IActivityManager.Stub
                    return superImpl.apply(code, new AttributionSource(shellUid,
                            Process.INVALID_PID, "com.android.shell",
                            attributionSource.getAttributionTag(), attributionSource.getToken(),
                            /*renouncedPermissions*/ null, attributionSource.getNext()),
                            /*renouncedPermissions*/ null, attributionSource.getDeviceId(),
                            attributionSource.getNext()),
                            shouldCollectAsyncNotedOp, message, shouldCollectMessage,
                            skiProxyOperation);
                } finally {
@@ -19968,7 +19969,8 @@ public class ActivityManagerService extends IActivityManager.Stub
                    return superImpl.apply(clientId, code, new AttributionSource(shellUid,
                            Process.INVALID_PID, "com.android.shell",
                            attributionSource.getAttributionTag(), attributionSource.getToken(),
                            /*renouncedPermissions*/ null, attributionSource.getNext()),
                            /*renouncedPermissions*/ null, attributionSource.getDeviceId(),
                            attributionSource.getNext()),
                            startIfModeDefault, shouldCollectAsyncNotedOp, message,
                            shouldCollectMessage, skipProxyOperation, proxyAttributionFlags,
                            proxiedAttributionFlags, attributionChainId);
@@ -19994,7 +19996,8 @@ public class ActivityManagerService extends IActivityManager.Stub
                    superImpl.apply(clientId, code, new AttributionSource(shellUid,
                            Process.INVALID_PID, "com.android.shell",
                            attributionSource.getAttributionTag(), attributionSource.getToken(),
                            /*renouncedPermissions*/ null, attributionSource.getNext()),
                            /*renouncedPermissions*/ null, attributionSource.getDeviceId(),
                            attributionSource.getNext()),
                            skipProxyOperation);
                } finally {
                    Binder.restoreCallingIdentity(identity);
Loading