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

Commit db10b7cb authored by Lee Shombert's avatar Lee Shombert Committed by Android (Google) Code Review
Browse files

Merge "Make 4 PackageManagerService APIs lock-free" into sc-dev

parents 2d6992e4 699f88d0
Loading
Loading
Loading
Loading
+78 −30
Original line number Original line Diff line number Diff line
@@ -2153,6 +2153,10 @@ public class PackageManagerService extends IPackageManager.Stub
        void enforceCrossUserPermission(int callingUid, @UserIdInt int userId,
        void enforceCrossUserPermission(int callingUid, @UserIdInt int userId,
                boolean requireFullPermission, boolean checkShell,
                boolean requireFullPermission, boolean checkShell,
                boolean requirePermissionWhenSameUser, String message);
                boolean requirePermissionWhenSameUser, String message);
        SigningDetails getSigningDetails(@NonNull String packageName);
        SigningDetails getSigningDetails(int uid);
        boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId);
        boolean filterAppAccess(String packageName, int callingUid, int userId);
    }
    }
    /**
    /**
@@ -4578,6 +4582,40 @@ public class PackageManagerService extends IPackageManager.Stub
            throw new SecurityException(errorMessage);
            throw new SecurityException(errorMessage);
        }
        }
        public SigningDetails getSigningDetails(@NonNull String packageName) {
            AndroidPackage p = mPackages.get(packageName);
            if (p == null) {
                return null;
            }
            return p.getSigningDetails();
        }
        public SigningDetails getSigningDetails(int uid) {
            final int appId = UserHandle.getAppId(uid);
            final Object obj = mSettings.getSettingLPr(appId);
            if (obj != null) {
                if (obj instanceof SharedUserSetting) {
                    return ((SharedUserSetting) obj).signatures.mSigningDetails;
                } else if (obj instanceof PackageSetting) {
                    final PackageSetting ps = (PackageSetting) obj;
                    return ps.signatures.mSigningDetails;
                }
            }
            return SigningDetails.UNKNOWN;
        }
        public boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
            PackageSetting ps = getPackageSetting(pkg.getPackageName());
            return shouldFilterApplicationLocked(ps, callingUid,
                    userId);
        }
        public boolean filterAppAccess(String packageName, int callingUid, int userId) {
            PackageSetting ps = getPackageSetting(packageName);
            return shouldFilterApplicationLocked(ps, callingUid,
                    userId);
        }
    }
    }
    /**
    /**
@@ -4728,6 +4766,26 @@ public class PackageManagerService extends IPackageManager.Stub
                return super.getPackageUidInternal(packageName, flags, userId, callingUid);
                return super.getPackageUidInternal(packageName, flags, userId, callingUid);
            }
            }
        }
        }
        public SigningDetails getSigningDetails(@NonNull String packageName) {
            synchronized (mLock) {
                return super.getSigningDetails(packageName);
            }
        }
        public SigningDetails getSigningDetails(int uid) {
            synchronized (mLock) {
                return super.getSigningDetails(uid);
            }
        }
        public boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
            synchronized (mLock) {
                return super.filterAppAccess(pkg, callingUid, userId);
            }
        }
        public boolean filterAppAccess(String packageName, int callingUid, int userId) {
            synchronized (mLock) {
                return super.filterAppAccess(packageName, callingUid, userId);
            }
        }
    }
    }
@@ -26560,6 +26618,22 @@ public class PackageManagerService extends IPackageManager.Stub
        return snapshotComputer().getPackage(uid);
        return snapshotComputer().getPackage(uid);
    }
    }
    private SigningDetails getSigningDetails(@NonNull String packageName) {
        return snapshotComputer().getSigningDetails(packageName);
    }
    private SigningDetails getSigningDetails(int uid) {
        return snapshotComputer().getSigningDetails(uid);
    }
    private boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
        return snapshotComputer().filterAppAccess(pkg, callingUid, userId);
    }
    private boolean filterAppAccess(String packageName, int callingUid, int userId) {
        return snapshotComputer().filterAppAccess(packageName, callingUid, userId);
    }
    private class PackageManagerInternalImpl extends PackageManagerInternal {
    private class PackageManagerInternalImpl extends PackageManagerInternal {
        @Override
        @Override
        public List<ApplicationInfo> getInstalledApplications(int flags, int userId,
        public List<ApplicationInfo> getInstalledApplications(int flags, int userId,
@@ -26615,29 +26689,11 @@ public class PackageManagerService extends IPackageManager.Stub
        }
        }
        private SigningDetails getSigningDetails(@NonNull String packageName) {
        private SigningDetails getSigningDetails(@NonNull String packageName) {
            synchronized (mLock) {
            return PackageManagerService.this.getSigningDetails(packageName);
                AndroidPackage p = mPackages.get(packageName);
                if (p == null) {
                    return null;
                }
                return p.getSigningDetails();
            }
        }
        }
        private SigningDetails getSigningDetails(int uid) {
        private SigningDetails getSigningDetails(int uid) {
            synchronized (mLock) {
            return PackageManagerService.this.getSigningDetails(uid);
                final int appId = UserHandle.getAppId(uid);
                final Object obj = mSettings.getSettingLPr(appId);
                if (obj != null) {
                    if (obj instanceof SharedUserSetting) {
                        return ((SharedUserSetting) obj).signatures.mSigningDetails;
                    } else if (obj instanceof PackageSetting) {
                        final PackageSetting ps = (PackageSetting) obj;
                        return ps.signatures.mSigningDetails;
                    }
                }
                return SigningDetails.UNKNOWN;
            }
        }
        }
        @Override
        @Override
@@ -26652,20 +26708,12 @@ public class PackageManagerService extends IPackageManager.Stub
        @Override
        @Override
        public boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
        public boolean filterAppAccess(AndroidPackage pkg, int callingUid, int userId) {
            synchronized (mLock) {
            return PackageManagerService.this.filterAppAccess(pkg, callingUid, userId);
                PackageSetting ps = getPackageSetting(pkg.getPackageName());
                return PackageManagerService.this.shouldFilterApplicationLocked(ps, callingUid,
                        userId);
            }
        }
        }
        @Override
        @Override
        public boolean filterAppAccess(String packageName, int callingUid, int userId) {
        public boolean filterAppAccess(String packageName, int callingUid, int userId) {
            synchronized (mLock) {
            return PackageManagerService.this.filterAppAccess(packageName, callingUid, userId);
                PackageSetting ps = getPackageSetting(packageName);
                return PackageManagerService.this.shouldFilterApplicationLocked(ps, callingUid,
                        userId);
            }
        }
        }
        @Override
        @Override