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

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

Merge "Enforce package visibility to the api checkUriPermission"

parents 3feacd99 6d90858f
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -710,6 +710,15 @@ public abstract class PackageManagerInternal implements PackageSettingsSnapshotP
    public abstract boolean filterAppAccess(
            @NonNull String packageName, int callingUid, int userId);

    /**
     * Returns whether or not access to the application which belongs to the given UID should be
     * filtered. If the UID is part of a shared user ID, return {@code true} if all applications
     * belong to the shared user ID should be filtered.
     *
     * @see #filterAppAccess(AndroidPackage, int, int)
     */
    public abstract boolean filterAppAccess(int uid, int callingUid);

    /** Returns whether the given package was signed by the platform */
    public abstract boolean isPlatformSigned(String pkg);

+5 −0
Original line number Diff line number Diff line
@@ -5699,6 +5699,11 @@ public class ActivityManagerService extends IActivityManager.Stub
        if (pid == MY_PID) {
            return PackageManager.PERMISSION_GRANTED;
        }
        if (uid != ROOT_UID) { // bypass the root
            if (mPackageManagerInt.filterAppAccess(uid, Binder.getCallingUid())) {
                return PackageManager.PERMISSION_DENIED;
            }
        }
        return mUgmInternal.checkUriPermission(new GrantUri(userId, uri, modeFlags), uid, modeFlags)
                ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED;
    }
+40 −0
Original line number Diff line number Diff line
@@ -2132,6 +2132,8 @@ public class PackageManagerService extends IPackageManager.Stub
        @LiveImplementation(override = LiveImplementation.MANDATORY)
        boolean filterAppAccess(String packageName, int callingUid, int userId);
        @LiveImplementation(override = LiveImplementation.MANDATORY)
        boolean filterAppAccess(int uid, int callingUid);
        @LiveImplementation(override = LiveImplementation.MANDATORY)
        void dump(int type, FileDescriptor fd, PrintWriter pw, DumpState dumpState);
    }
@@ -4657,6 +4659,22 @@ public class PackageManagerService extends IPackageManager.Stub
                    userId);
        }
        public boolean filterAppAccess(int uid, int callingUid) {
            final int userId = UserHandle.getUserId(uid);
            final int appId = UserHandle.getAppId(uid);
            final Object setting = mSettings.getSettingLPr(appId);
            if (setting instanceof SharedUserSetting) {
                return shouldFilterApplicationLocked(
                        (SharedUserSetting) setting, callingUid, userId);
            } else if (setting == null
                    || setting instanceof PackageSetting) {
                return shouldFilterApplicationLocked(
                        (PackageSetting) setting, callingUid, userId);
            }
            return false;
        }
        public void dump(int type, FileDescriptor fd, PrintWriter pw, DumpState dumpState) {
            final String packageName = dumpState.getTargetPackageName();
            final boolean checkin = dumpState.isCheckIn();
@@ -5003,6 +5021,11 @@ public class PackageManagerService extends IPackageManager.Stub
                return super.filterAppAccess(packageName, callingUid, userId);
            }
        }
        public final boolean filterAppAccess(int uid, int callingUid) {
            synchronized (mLock) {
                return super.filterAppAccess(uid, callingUid);
            }
        }
        public final void dump(int type, FileDescriptor fd, PrintWriter pw, DumpState dumpState) {
            synchronized (mLock) {
                super.dump(type, fd, pw, dumpState);
@@ -5373,6 +5396,14 @@ public class PackageManagerService extends IPackageManager.Stub
                current.release();
            }
        }
        public final boolean filterAppAccess(int uid, int callingUid) {
            ThreadComputer current = snapshot();
            try {
                return current.mComputer.filterAppAccess(uid, callingUid);
            } finally {
                current.release();
            }
        }
        public final boolean filterSharedLibPackageLPr(@Nullable PackageSetting ps, int uid,
                int userId, int flags) {
            ThreadComputer current = live();
@@ -27091,6 +27122,10 @@ public class PackageManagerService extends IPackageManager.Stub
        return mComputer.filterAppAccess(packageName, callingUid, userId);
    }
    private boolean filterAppAccess(int uid, int callingUid) {
        return mComputer.filterAppAccess(uid, callingUid);
    }
    private class PackageManagerInternalImpl extends PackageManagerInternal {
        @Override
        public List<ApplicationInfo> getInstalledApplications(int flags, int userId,
@@ -27173,6 +27208,11 @@ public class PackageManagerService extends IPackageManager.Stub
            return PackageManagerService.this.filterAppAccess(packageName, callingUid, userId);
        }
        @Override
        public boolean filterAppAccess(int uid, int callingUid) {
            return PackageManagerService.this.filterAppAccess(uid, callingUid);
        }
        @Override
        public AndroidPackage getPackage(String packageName) {
            return PackageManagerService.this.getPackage(packageName);