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

Commit 29ee8839 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 5537346 from 4f4df1d7 to qt-release

Change-Id: Iaf16399766f0d6f92e0770b776aff4ba3ae8539d
parents ee63a3e2 4f4df1d7
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ import android.os.ServiceManager;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.WorkSource;
import android.permission.PermissionManager;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
import android.util.Singleton;
@@ -3738,6 +3739,7 @@ public class ActivityManager {
        }
        // Isolated processes don't get any permissions.
        if (UserHandle.isIsolated(uid)) {
            PermissionManager.addPermissionDenialHint("uid " + uid + " is isolated");
            return PackageManager.PERMISSION_DENIED;
        }
        // If there is a uid that owns whatever is being accessed, it has
@@ -3753,24 +3755,26 @@ public class ActivityManager {
            Slog.w(TAG, "Permission denied: checkComponentPermission() owningUid=" + owningUid,
                    here);
            */
            PermissionManager.addPermissionDenialHint(
                    "Target is not exported. owningUid=" + owningUid);
            return PackageManager.PERMISSION_DENIED;
        }
        if (permission == null) {
            return PackageManager.PERMISSION_GRANTED;
        }
        try {
            return AppGlobals.getPackageManager()
                    .checkUidPermission(permission, uid);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
        return checkUidPermission(permission, uid);
    }

    /** @hide */
    public static int checkUidPermission(String permission, int uid) {
        try {
            List<String> hints = PermissionManager.getPermissionDenialHints();
            if (hints == null) {
                return AppGlobals.getPackageManager().checkUidPermission(permission, uid);
            } else {
                return AppGlobals.getPackageManager()
                    .checkUidPermission(permission, uid);
                        .checkUidPermissionWithDenialHintForwarding(permission, uid, hints);
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+45 −19
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.StorageManager;
import android.permission.PermissionManager;
import android.system.ErrnoException;
import android.system.Os;
import android.system.OsConstants;
@@ -98,6 +99,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executor;

@@ -1828,11 +1830,17 @@ class ContextImpl extends Context {
            }
            Slog.w(TAG, "Missing ActivityManager; assuming " + uid + " does not hold "
                    + permission);
            PermissionManager.addPermissionDenialHint("Missing ActivityManager");
            return PackageManager.PERMISSION_DENIED;
        }

        try {
            List<String> hints = PermissionManager.getPermissionDenialHints();
            if (hints == null) {
                return am.checkPermission(permission, pid, uid);
            } else {
                return am.checkPermissionWithDenialHintForwarding(permission, pid, uid, hints);
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -1889,43 +1897,61 @@ class ContextImpl extends Context {
            String permission, int resultOfCheck,
            boolean selfToo, int uid, String message) {
        if (resultOfCheck != PackageManager.PERMISSION_GRANTED) {
            List<String> hints = PermissionManager.getPermissionDenialHints();
            throw new SecurityException(
                    (message != null ? (message + ": ") : "") +
                    (selfToo
                     ? "Neither user " + uid + " nor current process has "
                     : "uid " + uid + " does not have ") +
                    permission +
                    ".");
                     : "uid " + uid + " does not have ")
                            + permission + "."
                            + (hints == null ? "" : " Hints: " + hints));
        }
    }

    @Override
    public void enforcePermission(
            String permission, int pid, int uid, String message) {
        List<String> prev = PermissionManager.collectPermissionDenialHints(this, uid);
        try {
            enforce(permission,
                    checkPermission(permission, pid, uid),
                    false,
                    uid,
                    message);
        } finally {
            PermissionManager.resetPermissionDenialHints(prev);
        }
    }

    @Override
    public void enforceCallingPermission(String permission, String message) {
        List<String> prev = PermissionManager.collectPermissionDenialHints(this,
                Binder.getCallingUid());
        try {
            enforce(permission,
                    checkCallingPermission(permission),
                    false,
                    Binder.getCallingUid(),
                    message);
        } finally {
            PermissionManager.resetPermissionDenialHints(prev);
        }
    }

    @Override
    public void enforceCallingOrSelfPermission(
            String permission, String message) {
        List<String> prev = PermissionManager.collectPermissionDenialHints(this,
                Binder.getCallingUid());
        try {
            enforce(permission,
                    checkCallingOrSelfPermission(permission),
                    true,
                    Binder.getCallingUid(),
                    message);
        } finally {
            PermissionManager.resetPermissionDenialHints(prev);
        }
    }

    @Override
+1 −0
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@ interface IActivityManager {
    int getProcessLimit();
    @UnsupportedAppUsage
    int checkPermission(in String permission, int pid, int uid);
    int checkPermissionWithDenialHintForwarding(in String permission, int pid, int uid, inout List<String> permissionDenialHints);
    int checkUriPermission(in Uri uri, int pid, int uid, int mode, int userId,
            in IBinder callerToken);
    void grantUriPermission(in IApplicationThread caller, in String targetPkg, in Uri uri,
+3 −4
Original line number Diff line number Diff line
@@ -1497,7 +1497,7 @@ public final class LoadedApk {
            private Intent mCurIntent;
            private final boolean mOrdered;
            private boolean mDispatched;
            private Throwable mPreviousRunStacktrace; // To investigate b/37809561. STOPSHIP remove.
            private boolean mRunCalled;

            public Args(Intent intent, int resultCode, String resultData, Bundle resultExtras,
                    boolean ordered, boolean sticky, int sendingUser) {
@@ -1525,13 +1525,12 @@ public final class LoadedApk {
                    final Intent intent = mCurIntent;
                    if (intent == null) {
                        Log.wtf(TAG, "Null intent being dispatched, mDispatched=" + mDispatched
                                + ": run() previously called at "
                                + Log.getStackTraceString(mPreviousRunStacktrace));
                                + (mRunCalled ? ", run() has already been called" : ""));
                    }

                    mCurIntent = null;
                    mDispatched = true;
                    mPreviousRunStacktrace = new Throwable("Previous stacktrace");
                    mRunCalled = true;
                    if (receiver == null || intent == null || mForgotten) {
                        if (mRegistered && ordered) {
                            if (ActivityThread.DEBUG_BROADCAST) Slog.i(ActivityThread.TAG,
+1 −1
Original line number Diff line number Diff line
@@ -618,7 +618,7 @@ final class SystemServiceRegistry {
                new CachedServiceFetcher<RcsManager>() {
                    @Override
                    public RcsManager createService(ContextImpl ctx) {
                        return new RcsManager();
                        return new RcsManager(ctx.getOuterContext());
                    }
                });

Loading