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

Commit a0b1198e authored by Jeff Sharkey's avatar Jeff Sharkey Committed by android-build-merger
Browse files

DO NOT MERGE. Grant MMS Uri permissions as the calling UID.

am: 6f754e48

Change-Id: I2f6dd5ba1e266b3d451533e518ec7f2fe24b262c
parents d20b04a4 6f754e48
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -16,12 +16,21 @@

package android.app;

import android.content.Intent;

/**
 * Activity manager local system service interface.
 *
 * @hide Only for use within the system server.
 */
public abstract class ActivityManagerInternal {
    /**
     * Grant Uri permissions from one app to another. This method only extends
     * permission grants if {@code callingUid} has permission to them.
     */
    public abstract void grantUriPermissionFromIntent(int callingUid, String targetPkg,
            Intent intent, int targetUserId);

    /**
     * Verify that calling app has access to the given provider.
     */
+13 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server;

import android.Manifest;
import android.app.ActivityManagerInternal;
import android.app.AppOpsManager;
import android.app.PendingIntent;
import android.content.ComponentName;
@@ -397,13 +398,21 @@ public class MmsServiceBroker extends SystemService {
         */
        private Uri adjustUriForUserAndGrantPermission(Uri contentUri, String action,
                int permission) {
            final Intent grantIntent = new Intent();
            grantIntent.setData(contentUri);
            grantIntent.setFlags(permission);

            final int callingUid = Binder.getCallingUid();
            final int callingUserId = UserHandle.getCallingUserId();
            if (callingUserId != UserHandle.USER_OWNER) {
                contentUri = ContentProvider.maybeAddUserId(contentUri, callingUserId);
            }

            long token = Binder.clearCallingIdentity();
            try {
                mContext.grantUriPermission(PHONE_PACKAGE_NAME, contentUri, permission);
                LocalServices.getService(ActivityManagerInternal.class)
                        .grantUriPermissionFromIntent(callingUid, PHONE_PACKAGE_NAME,
                                grantIntent, UserHandle.USER_OWNER);

                // Grant permission for the carrier app.
                Intent intent = new Intent(action);
@@ -412,7 +421,9 @@ public class MmsServiceBroker extends SystemService {
                List<String> carrierPackages = telephonyManager.getCarrierPackageNamesForIntent(
                        intent);
                if (carrierPackages != null && carrierPackages.size() == 1) {
                    mContext.grantUriPermission(carrierPackages.get(0), contentUri, permission);
                    LocalServices.getService(ActivityManagerInternal.class)
                            .grantUriPermissionFromIntent(callingUid, carrierPackages.get(0),
                                    grantIntent, UserHandle.USER_OWNER);
                }
            } finally {
                Binder.restoreCallingIdentity(token);
+9 −0
Original line number Diff line number Diff line
@@ -19703,6 +19703,15 @@ public final class ActivityManagerService extends ActivityManagerNative
    }
    private final class LocalService extends ActivityManagerInternal {
        @Override
        public void grantUriPermissionFromIntent(int callingUid, String targetPkg, Intent intent,
                int targetUserId) {
            synchronized (ActivityManagerService.this) {
                ActivityManagerService.this.grantUriPermissionFromIntentLocked(callingUid,
                        targetPkg, intent, null, targetUserId);
            }
        }
        @Override
        public String checkContentProviderAccess(String authority, int userId) {
            return ActivityManagerService.this.checkContentProviderAccess(authority, userId);