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

Commit 64bd9c7b authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Uri permission grants improvements, tests, fixes." into rvc-dev

parents 26e55eb8 1d194f92
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -2683,7 +2683,6 @@ public class ActivityManagerService extends IActivityManager.Stub
        Slog.d("AppOps", "AppOpsService published");
        LocalServices.addService(ActivityManagerInternal.class, mInternal);
        mActivityTaskManager.onActivityManagerInternalAdded();
        mUgmInternal.onActivityManagerInternalAdded();
        mPendingIntentController.onActivityManagerInternalAdded();
        // Wait for the synchronized block started in mProcessCpuThread,
        // so that any other access to mProcessCpuTracker from main thread
@@ -6412,7 +6411,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        if (pid == MY_PID) {
            return PackageManager.PERMISSION_GRANTED;
        }
        return mUgmInternal.checkUriPermission(new GrantUri(userId, uri, false), uid, modeFlags)
        return mUgmInternal.checkUriPermission(new GrantUri(userId, uri, modeFlags), uid, modeFlags)
                ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED;
    }
@@ -6424,7 +6423,7 @@ public class ActivityManagerService extends IActivityManager.Stub
    public void grantUriPermission(IApplicationThread caller, String targetPkg, Uri uri,
            final int modeFlags, int userId) {
        enforceNotIsolatedCaller("grantUriPermission");
        GrantUri grantUri = new GrantUri(userId, uri, false);
        GrantUri grantUri = new GrantUri(userId, uri, modeFlags);
        synchronized(this) {
            final ProcessRecord r = getRecordForAppLocked(caller);
            if (r == null) {
@@ -6482,8 +6481,8 @@ public class ActivityManagerService extends IActivityManager.Stub
                return;
            }
            mUgmInternal.revokeUriPermission(targetPackage, r.uid, new GrantUri(userId, uri, false),
                    modeFlags);
            mUgmInternal.revokeUriPermission(targetPackage, r.uid,
                    new GrantUri(userId, uri, modeFlags), modeFlags);
        }
    }
+7 −6
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.uri;

import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.util.proto.ProtoOutputStream;

@@ -27,12 +28,12 @@ import com.android.server.am.GrantUriProto;
public class GrantUri {
    public final int sourceUserId;
    public final Uri uri;
    public boolean prefix;
    public final boolean prefix;

    public GrantUri(int sourceUserId, Uri uri, boolean prefix) {
    public GrantUri(int sourceUserId, Uri uri, int modeFlags) {
        this.sourceUserId = sourceUserId;
        this.uri = uri;
        this.prefix = prefix;
        this.prefix = (modeFlags & Intent.FLAG_GRANT_PREFIX_URI_PERMISSION) != 0;
    }

    @Override
@@ -74,12 +75,12 @@ public class GrantUri {
        proto.end(token);
    }

    public static GrantUri resolve(int defaultSourceUserHandle, Uri uri) {
    public static GrantUri resolve(int defaultSourceUserHandle, Uri uri, int modeFlags) {
        if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
            return new GrantUri(ContentProvider.getUserIdFromUri(uri, defaultSourceUserHandle),
                    ContentProvider.getUriWithoutUserId(uri), false);
                    ContentProvider.getUriWithoutUserId(uri), modeFlags);
        } else {
            return new GrantUri(defaultSourceUserHandle, uri, false);
            return new GrantUri(defaultSourceUserHandle, uri, modeFlags);
        }
    }
}
+6 −5
Original line number Diff line number Diff line
@@ -16,22 +16,23 @@

package com.android.server.uri;

import android.util.ArraySet;
import android.util.proto.ProtoOutputStream;

import com.android.server.am.NeededUriGrantsProto;

import java.util.ArrayList;

/** List of {@link GrantUri} a process needs. */
public class NeededUriGrants extends ArrayList<GrantUri> {
public class NeededUriGrants {
    final String targetPkg;
    final int targetUid;
    final int flags;
    final ArraySet<GrantUri> uris;

    public NeededUriGrants(String targetPkg, int targetUid, int flags) {
        this.targetPkg = targetPkg;
        this.targetUid = targetUid;
        this.flags = flags;
        this.uris = new ArraySet<>();
    }

    public void dumpDebug(ProtoOutputStream proto, long fieldId) {
@@ -40,9 +41,9 @@ public class NeededUriGrants extends ArrayList<GrantUri> {
        proto.write(NeededUriGrantsProto.TARGET_UID, targetUid);
        proto.write(NeededUriGrantsProto.FLAGS, flags);

        final int N = this.size();
        final int N = uris.size();
        for (int i = 0; i < N; i++) {
            this.get(i).dumpDebug(proto, NeededUriGrantsProto.GRANTS);
            uris.valueAt(i).dumpDebug(proto, NeededUriGrantsProto.GRANTS);
        }
        proto.end(token);
    }
+30 −0
Original line number Diff line number Diff line
{
    "presubmit": [
        {
            "name": "FrameworksServicesTests",
            "options": [
                {
                    "include-filter": "com.android.server.uri."
                }
            ]
        }
    ],
    "postsubmit": [
        {
            "name": "CtsAppSecurityHostTestCases",
            "options": [
                {
                    "include-filter": "android.appsecurity.cts.AppSecurityTests#testPermissionDiffCert"
                }
            ]
        },
        {
            "name": "CtsWindowManagerDeviceTestCases",
            "options": [
                {
                    "include-filter": "android.server.wm.CrossAppDragAndDropTests"
                }
            ]
        }
    ]
}
+0 −1
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import java.io.PrintWriter;
 */
public interface UriGrantsManagerInternal {
    void onSystemReady();
    void onActivityManagerInternalAdded();
    void removeUriPermissionIfNeeded(UriPermission perm);
    void grantUriPermission(int callingUid, String targetPkg, GrantUri grantUri,
            final int modeFlags, UriPermissionOwner owner, int targetUserId);
Loading