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

Commit 4bc98cb6 authored by Rhed Jao's avatar Rhed Jao Committed by Android (Google) Code Review
Browse files

Merge "Allows system uid to access application across users"

parents ef0fa105 a4fb7ea1
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -236,7 +236,8 @@ public interface Computer extends PackageDataSnapshot {
     * existence.
     * <p>
     * Package with {@link PackageManager#SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN} is not
     * treated as an uninstalled package for the carrier apps customization.
     * treated as an uninstalled package for the carrier apps customization. Bypassing the
     * uninstalled package check if the caller is system, shell or root uid.
     */
    boolean shouldFilterApplicationIncludingUninstalled(@Nullable PackageStateInternal ps,
            int callingUid, int userId);
+11 −3
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import static com.android.server.pm.PackageManagerService.EMPTY_INT_ARRAY;
import static com.android.server.pm.PackageManagerService.HIDE_EPHEMERAL_APIS;
import static com.android.server.pm.PackageManagerService.TAG;
import static com.android.server.pm.PackageManagerServiceUtils.compareSignatures;
import static com.android.server.pm.PackageManagerServiceUtils.isSystemOrRootOrShell;
import static com.android.server.pm.resolution.ComponentResolver.RESOLVE_PRIORITY_SORTER;

import android.Manifest;
@@ -2737,8 +2738,12 @@ public class ComputerEngine implements Computer {
        final String instantAppPkgName = getInstantAppPackageName(callingUid);
        final boolean callerIsInstantApp = instantAppPkgName != null;
        // Don't treat hiddenUntilInstalled as an uninstalled state, phone app needs to access
        // these hidden application details to customize carrier apps.
        if (ps == null || (filterUninstall && !ps.isHiddenUntilInstalled()
        // these hidden application details to customize carrier apps. Also, allowing the system
        // caller accessing to application across users.
        if (ps == null
                || (filterUninstall
                        && !isSystemOrRootOrShell(callingUid)
                        && !ps.isHiddenUntilInstalled()
                        && !ps.getUserStateOrDefault(userId).isInstalled())) {
            // If caller is instant app or sdk sandbox and ps is null, pretend the application
            // exists, but, needs to be filtered
@@ -2837,6 +2842,9 @@ public class ComputerEngine implements Computer {
        if (shouldFilterApplication(sus, callingUid, userId)) {
            return true;
        }
        if (isSystemOrRootOrShell(callingUid)) {
            return false;
        }
        final ArraySet<PackageStateInternal> packageStates =
                (ArraySet<PackageStateInternal>) sus.getPackageStates();
        for (int index = 0; index < packageStates.size(); index++) {
+7 −1
Original line number Diff line number Diff line
@@ -1271,7 +1271,13 @@ public class PackageManagerServiceUtils {
     * Check if the Binder caller is system UID, root's UID, or shell's UID.
     */
    public static boolean isSystemOrRootOrShell() {
        final int uid = Binder.getCallingUid();
        return isSystemOrRootOrShell(Binder.getCallingUid());
    }

    /**
     * @see #isSystemOrRoot()
     */
    public static boolean isSystemOrRootOrShell(int uid) {
        return uid == Process.SYSTEM_UID || uid == Process.ROOT_UID || uid == Process.SHELL_UID;
    }