Loading services/core/java/com/android/server/am/ActivityManagerService.java +4 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; } Loading @@ -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) { Loading Loading @@ -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); } } Loading services/core/java/com/android/server/uri/GrantUri.java +7 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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); } } } services/core/java/com/android/server/uri/NeededUriGrants.java +6 −5 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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); } Loading services/core/java/com/android/server/uri/TEST_MAPPING 0 → 100644 +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" } ] } ] } services/core/java/com/android/server/uri/UriGrantsManagerInternal.java +0 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
services/core/java/com/android/server/am/ActivityManagerService.java +4 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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; } Loading @@ -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) { Loading Loading @@ -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); } } Loading
services/core/java/com/android/server/uri/GrantUri.java +7 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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); } } }
services/core/java/com/android/server/uri/NeededUriGrants.java +6 −5 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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); } Loading
services/core/java/com/android/server/uri/TEST_MAPPING 0 → 100644 +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" } ] } ] }
services/core/java/com/android/server/uri/UriGrantsManagerInternal.java +0 −1 Original line number Diff line number Diff line Loading @@ -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