Loading services/core/java/com/android/server/pm/PackageManagerService.java +102 −63 Original line number Original line Diff line number Diff line Loading @@ -2188,12 +2188,12 @@ public class PackageManagerService extends IPackageManager.Stub private void grantRequestedRuntimePermissionsForUser(PackageParser.Package pkg, int userId, private void grantRequestedRuntimePermissionsForUser(PackageParser.Package pkg, int userId, String[] grantedPermissions) { String[] grantedPermissions) { SettingBase sb = (SettingBase) pkg.mExtras; PackageSetting ps = (PackageSetting) pkg.mExtras; if (sb == null) { if (ps == null) { return; return; } } PermissionsState permissionsState = sb.getPermissionsState(); PermissionsState permissionsState = ps.getPermissionsState(); final int immutableFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED final int immutableFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED | PackageManager.FLAG_PERMISSION_POLICY_FIXED; | PackageManager.FLAG_PERMISSION_POLICY_FIXED; Loading Loading @@ -3517,7 +3517,7 @@ public class PackageManagerService extends IPackageManager.Stub * and {@code 0}</li> * and {@code 0}</li> * <li>The calling application has the permission * <li>The calling application has the permission * {@link android.Manifest.permission#ACCESS_INSTANT_APPS}</li> * {@link android.Manifest.permission#ACCESS_INSTANT_APPS}</li> * <li>[TODO] The calling application is the default launcher on the * <li>The calling application is the default launcher on the * system partition.</li> * system partition.</li> * </ol> * </ol> */ */ Loading Loading @@ -4905,9 +4905,13 @@ public class PackageManagerService extends IPackageManager.Stub } } } } private void updateSequenceNumberLP(String packageName, int[] userList) { private void updateSequenceNumberLP(PackageSetting pkgSetting, int[] userList) { for (int i = userList.length - 1; i >= 0; --i) { for (int i = userList.length - 1; i >= 0; --i) { final int userId = userList[i]; final int userId = userList[i]; // don't add instant app to the list of updates if (pkgSetting.getInstantApp(userId)) { continue; } SparseArray<String> changedPackages = mChangedPackages.get(userId); SparseArray<String> changedPackages = mChangedPackages.get(userId); if (changedPackages == null) { if (changedPackages == null) { changedPackages = new SparseArray<>(); changedPackages = new SparseArray<>(); Loading @@ -4918,12 +4922,12 @@ public class PackageManagerService extends IPackageManager.Stub sequenceNumbers = new HashMap<>(); sequenceNumbers = new HashMap<>(); mChangedPackagesSequenceNumbers.put(userId, sequenceNumbers); mChangedPackagesSequenceNumbers.put(userId, sequenceNumbers); } } final Integer sequenceNumber = sequenceNumbers.get(packageName); final Integer sequenceNumber = sequenceNumbers.get(pkgSetting.name); if (sequenceNumber != null) { if (sequenceNumber != null) { changedPackages.remove(sequenceNumber); changedPackages.remove(sequenceNumber); } } changedPackages.put(mChangedPackagesSequenceNumber, packageName); changedPackages.put(mChangedPackagesSequenceNumber, pkgSetting.name); sequenceNumbers.put(packageName, mChangedPackagesSequenceNumber); sequenceNumbers.put(pkgSetting.name, mChangedPackagesSequenceNumber); } } mChangedPackagesSequenceNumber++; mChangedPackagesSequenceNumber++; } } Loading Loading @@ -5365,7 +5369,7 @@ public class PackageManagerService extends IPackageManager.Stub "grantRuntimePermission"); "grantRuntimePermission"); final int uid; final int uid; final SettingBase sb; final PackageSetting ps; synchronized (mPackages) { synchronized (mPackages) { final PackageParser.Package pkg = mPackages.get(packageName); final PackageParser.Package pkg = mPackages.get(packageName); Loading @@ -5376,12 +5380,9 @@ public class PackageManagerService extends IPackageManager.Stub if (bp == null) { if (bp == null) { throw new IllegalArgumentException("Unknown permission: " + name); throw new IllegalArgumentException("Unknown permission: " + name); } } sb = (SettingBase) pkg.mExtras; ps = (PackageSetting) pkg.mExtras; if (sb == null) { if (ps == null throw new IllegalArgumentException("Unknown package: " + packageName); || filterAppAccessLPr(ps, callingUid, userId)) { } if (sb instanceof PackageSetting && filterAppAccessLPr((PackageSetting) sb, callingUid, userId)) { throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } } Loading @@ -5399,7 +5400,7 @@ public class PackageManagerService extends IPackageManager.Stub uid = UserHandle.getUid(userId, pkg.applicationInfo.uid); uid = UserHandle.getUid(userId, pkg.applicationInfo.uid); final PermissionsState permissionsState = sb.getPermissionsState(); final PermissionsState permissionsState = ps.getPermissionsState(); final int flags = permissionsState.getPermissionFlags(name, userId); final int flags = permissionsState.getPermissionFlags(name, userId); if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) { if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) { Loading @@ -5421,7 +5422,6 @@ public class PackageManagerService extends IPackageManager.Stub return; return; } } final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps.getInstantApp(userId) && !bp.isInstant()) { if (ps.getInstantApp(userId) && !bp.isInstant()) { throw new SecurityException("Cannot grant non-ephemeral permission" throw new SecurityException("Cannot grant non-ephemeral permission" + name + " for package " + packageName); + name + " for package " + packageName); Loading Loading @@ -5505,7 +5505,11 @@ public class PackageManagerService extends IPackageManager.Stub if (pkg == null) { if (pkg == null) { throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } } final PackageSetting ps = (PackageSetting) pkg.mExtras; if (ps == null || filterAppAccessLPr(ps, Binder.getCallingUid(), userId)) { throw new IllegalArgumentException("Unknown package: " + packageName); } final BasePermission bp = mSettings.mPermissions.get(name); final BasePermission bp = mSettings.mPermissions.get(name); if (bp == null) { if (bp == null) { throw new IllegalArgumentException("Unknown permission: " + name); throw new IllegalArgumentException("Unknown permission: " + name); Loading @@ -5523,12 +5527,7 @@ public class PackageManagerService extends IPackageManager.Stub return; return; } } SettingBase sb = (SettingBase) pkg.mExtras; final PermissionsState permissionsState = ps.getPermissionsState(); if (sb == null) { throw new IllegalArgumentException("Unknown package: " + packageName); } final PermissionsState permissionsState = sb.getPermissionsState(); final int flags = permissionsState.getPermissionFlags(name, userId); final int flags = permissionsState.getPermissionFlags(name, userId); if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) { if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) { Loading Loading @@ -5681,15 +5680,12 @@ public class PackageManagerService extends IPackageManager.Stub if (bp == null) { if (bp == null) { return 0; return 0; } } final SettingBase sb = (SettingBase) pkg.mExtras; final PackageSetting ps = (PackageSetting) pkg.mExtras; if (sb == null) { if (ps == null return 0; || filterAppAccessLPr(ps, callingUid, userId)) { } if (sb instanceof PackageSetting && filterAppAccessLPr((PackageSetting) sb, callingUid, userId)) { return 0; return 0; } } PermissionsState permissionsState = sb.getPermissionsState(); PermissionsState permissionsState = ps.getPermissionsState(); return permissionsState.getPermissionFlags(name, userId); return permissionsState.getPermissionFlags(name, userId); } } } } Loading @@ -5703,7 +5699,8 @@ public class PackageManagerService extends IPackageManager.Stub enforceGrantRevokeRuntimePermissionPermissions("updatePermissionFlags"); enforceGrantRevokeRuntimePermissionPermissions("updatePermissionFlags"); enforceCrossUserPermission(Binder.getCallingUid(), userId, final int callingUid = Binder.getCallingUid(); enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, true /* checkShell */, true /* requireFullPermission */, true /* checkShell */, "updatePermissionFlags"); "updatePermissionFlags"); Loading @@ -5721,18 +5718,18 @@ public class PackageManagerService extends IPackageManager.Stub if (pkg == null) { if (pkg == null) { throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } } final PackageSetting ps = (PackageSetting) pkg.mExtras; if (ps == null || filterAppAccessLPr(ps, callingUid, userId)) { throw new IllegalArgumentException("Unknown package: " + packageName); } final BasePermission bp = mSettings.mPermissions.get(name); final BasePermission bp = mSettings.mPermissions.get(name); if (bp == null) { if (bp == null) { throw new IllegalArgumentException("Unknown permission: " + name); throw new IllegalArgumentException("Unknown permission: " + name); } } SettingBase sb = (SettingBase) pkg.mExtras; PermissionsState permissionsState = ps.getPermissionsState(); if (sb == null) { throw new IllegalArgumentException("Unknown package: " + packageName); } PermissionsState permissionsState = sb.getPermissionsState(); boolean hadState = permissionsState.getRuntimePermissionState(name, userId) != null; boolean hadState = permissionsState.getRuntimePermissionState(name, userId) != null; Loading Loading @@ -5776,11 +5773,11 @@ public class PackageManagerService extends IPackageManager.Stub final int packageCount = mPackages.size(); final int packageCount = mPackages.size(); for (int pkgIndex = 0; pkgIndex < packageCount; pkgIndex++) { for (int pkgIndex = 0; pkgIndex < packageCount; pkgIndex++) { final PackageParser.Package pkg = mPackages.valueAt(pkgIndex); final PackageParser.Package pkg = mPackages.valueAt(pkgIndex); SettingBase sb = (SettingBase) pkg.mExtras; final PackageSetting ps = (PackageSetting) pkg.mExtras; if (sb == null) { if (ps == null) { continue; continue; } } PermissionsState permissionsState = sb.getPermissionsState(); PermissionsState permissionsState = ps.getPermissionsState(); changed |= permissionsState.updatePermissionFlagsForAllPermissions( changed |= permissionsState.updatePermissionFlagsForAllPermissions( userId, flagMask, flagValues); userId, flagMask, flagValues); } } Loading Loading @@ -9634,6 +9631,8 @@ public class PackageManagerService extends IPackageManager.Stub public void reconcileSecondaryDexFiles(String packageName) { public void reconcileSecondaryDexFiles(String packageName) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return; return; } else if (isInstantApp(packageName, UserHandle.getCallingUserId())) { return; } } mDexManager.reconcileSecondaryDexFiles(packageName); mDexManager.reconcileSecondaryDexFiles(packageName); } } Loading Loading @@ -14412,8 +14411,8 @@ public class PackageManagerService extends IPackageManager.Stub int userId) { int userId) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null); mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null); PackageSetting pkgSetting; PackageSetting pkgSetting; final int uid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid(); enforceCrossUserPermission(uid, userId, enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, true /* checkShell */, true /* requireFullPermission */, true /* checkShell */, "setApplicationHiddenSetting for user " + userId); "setApplicationHiddenSetting for user " + userId); Loading @@ -14432,6 +14431,9 @@ public class PackageManagerService extends IPackageManager.Stub if (pkgSetting == null) { if (pkgSetting == null) { return false; return false; } } if (filterAppAccessLPr(pkgSetting, callingUid, userId)) { return false; } // Do not allow "android" is being disabled // Do not allow "android" is being disabled if ("android".equals(packageName)) { if ("android".equals(packageName)) { Slog.w(TAG, "Cannot hide package: android"); Slog.w(TAG, "Cannot hide package: android"); Loading @@ -14448,7 +14450,7 @@ public class PackageManagerService extends IPackageManager.Stub return false; return false; } } // Only allow protected packages to hide themselves. // Only allow protected packages to hide themselves. if (hidden && !UserHandle.isSameApp(uid, pkgSetting.appId) if (hidden && !UserHandle.isSameApp(callingUid, pkgSetting.appId) && mProtectedPackages.isPackageStateProtected(userId, packageName)) { && mProtectedPackages.isPackageStateProtected(userId, packageName)) { Slog.w(TAG, "Not hiding protected package: " + packageName); Slog.w(TAG, "Not hiding protected package: " + packageName); return false; return false; Loading Loading @@ -14565,6 +14567,20 @@ public class PackageManagerService extends IPackageManager.Stub if (pkgSetting == null) { if (pkgSetting == null) { return PackageManager.INSTALL_FAILED_INVALID_URI; return PackageManager.INSTALL_FAILED_INVALID_URI; } } if (!canViewInstantApps(callingUid, UserHandle.getUserId(callingUid))) { // only allow the existing package to be used if it's installed as a full // application for at least one user boolean installAllowed = false; for (int checkUserId : sUserManager.getUserIds()) { installAllowed = !pkgSetting.getInstantApp(checkUserId); if (installAllowed) { break; } } if (!installAllowed) { return PackageManager.INSTALL_FAILED_INVALID_URI; } } if (!pkgSetting.getInstalled(userId)) { if (!pkgSetting.getInstalled(userId)) { pkgSetting.setInstalled(true, userId); pkgSetting.setInstalled(true, userId); pkgSetting.setHidden(false, userId); pkgSetting.setHidden(false, userId); Loading @@ -14588,7 +14604,7 @@ public class PackageManagerService extends IPackageManager.Stub } } sendPackageAddedForUser(packageName, pkgSetting, userId); sendPackageAddedForUser(packageName, pkgSetting, userId); synchronized (mPackages) { synchronized (mPackages) { updateSequenceNumberLP(packageName, new int[]{ userId }); updateSequenceNumberLP(pkgSetting, new int[]{ userId }); } } } } } finally { } finally { Loading Loading @@ -14634,7 +14650,8 @@ public class PackageManagerService extends IPackageManager.Stub public String[] setPackagesSuspendedAsUser(String[] packageNames, boolean suspended, public String[] setPackagesSuspendedAsUser(String[] packageNames, boolean suspended, int userId) { int userId) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null); mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null); enforceCrossUserPermission(Binder.getCallingUid(), userId, final int callingUid = Binder.getCallingUid(); enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, true /* checkShell */, true /* requireFullPermission */, true /* checkShell */, "setPackagesSuspended for user " + userId); "setPackagesSuspended for user " + userId); Loading @@ -14655,7 +14672,8 @@ public class PackageManagerService extends IPackageManager.Stub final int appId; final int appId; synchronized (mPackages) { synchronized (mPackages) { final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); if (pkgSetting == null) { if (pkgSetting == null || filterAppAccessLPr(pkgSetting, callingUid, userId)) { Slog.w(TAG, "Could not find package setting for package \"" + packageName Slog.w(TAG, "Could not find package setting for package \"" + packageName + "\". Skipping suspending/un-suspending."); + "\". Skipping suspending/un-suspending."); unactionedPackages.add(packageName); unactionedPackages.add(packageName); Loading Loading @@ -15065,6 +15083,10 @@ public class PackageManagerService extends IPackageManager.Stub boolean result = false; boolean result = false; synchronized (mPackages) { synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (filterAppAccessLPr(ps, Binder.getCallingUid(), UserHandle.getCallingUserId())) { return false; } result = mSettings.updateIntentFilterVerificationStatusLPw(packageName, status, userId); result = mSettings.updateIntentFilterVerificationStatusLPw(packageName, status, userId); } } if (result) { if (result) { Loading Loading @@ -15165,7 +15187,9 @@ public class PackageManagerService extends IPackageManager.Stub // writer // writer synchronized (mPackages) { synchronized (mPackages) { PackageSetting targetPackageSetting = mSettings.mPackages.get(targetPackage); PackageSetting targetPackageSetting = mSettings.mPackages.get(targetPackage); if (targetPackageSetting == null) { if (targetPackageSetting == null || filterAppAccessLPr( targetPackageSetting, callingUid, UserHandle.getUserId(callingUid))) { throw new IllegalArgumentException("Unknown target package: " + targetPackage); throw new IllegalArgumentException("Unknown target package: " + targetPackage); } } Loading Loading @@ -15246,7 +15270,9 @@ public class PackageManagerService extends IPackageManager.Stub if (ps == null) { if (ps == null) { throw new IllegalArgumentException("Unknown target package " + packageName); throw new IllegalArgumentException("Unknown target package " + packageName); } } if (filterAppAccessLPr(ps, Binder.getCallingUid(), UserHandle.getCallingUserId())) { throw new IllegalArgumentException("Unknown target package " + packageName); } if (!Objects.equals(callerPackageName, ps.installerPackageName)) { if (!Objects.equals(callerPackageName, ps.installerPackageName)) { throw new IllegalArgumentException("Calling package " + callerPackageName throw new IllegalArgumentException("Calling package " + callerPackageName + " is not installer for " + packageName); + " is not installer for " + packageName); Loading Loading @@ -18268,7 +18294,7 @@ public class PackageManagerService extends IPackageManager.Stub } } if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) { if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) { updateSequenceNumberLP(pkgName, res.newUsers); updateSequenceNumberLP(ps, res.newUsers); updateInstantAppInstallerLocked(pkgName); updateInstantAppInstallerLocked(pkgName); } } } } Loading Loading @@ -18494,8 +18520,7 @@ public class PackageManagerService extends IPackageManager.Stub final int callingUid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid(); mContext.enforceCallingOrSelfPermission( mContext.enforceCallingOrSelfPermission( android.Manifest.permission.DELETE_PACKAGES, null); android.Manifest.permission.DELETE_PACKAGES, null); final int hasAccessInstantApps = mContext.checkCallingOrSelfPermission( final boolean canViewInstantApps = canViewInstantApps(callingUid, userId); android.Manifest.permission.ACCESS_INSTANT_APPS); Preconditions.checkNotNull(versionedPackage); Preconditions.checkNotNull(versionedPackage); Preconditions.checkNotNull(observer); Preconditions.checkNotNull(observer); Preconditions.checkArgumentInRange(versionedPackage.getVersionCode(), Preconditions.checkArgumentInRange(versionedPackage.getVersionCode(), Loading Loading @@ -18566,7 +18591,7 @@ public class PackageManagerService extends IPackageManager.Stub final boolean targetIsInstantApp = final boolean targetIsInstantApp = ps.getInstantApp(UserHandle.getUserId(callingUid)); ps.getInstantApp(UserHandle.getUserId(callingUid)); doDeletePackage = !targetIsInstantApp doDeletePackage = !targetIsInstantApp || hasAccessInstantApps == PackageManager.PERMISSION_GRANTED; || canViewInstantApps; } } if (doDeletePackage) { if (doDeletePackage) { if (!deleteAllUsers) { if (!deleteAllUsers) { Loading Loading @@ -18877,7 +18902,7 @@ public class PackageManagerService extends IPackageManager.Stub if (pkg != null) { if (pkg != null) { mInstantAppRegistry.onPackageUninstalledLPw(pkg, info.removedUsers); mInstantAppRegistry.onPackageUninstalledLPw(pkg, info.removedUsers); } } updateSequenceNumberLP(packageName, info.removedUsers); updateSequenceNumberLP(uninstalledPs, info.removedUsers); updateInstantAppInstallerLocked(packageName); updateInstantAppInstallerLocked(packageName); } } } } Loading Loading @@ -21234,7 +21259,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); // Limit who can change which apps // Limit who can change which apps if (!UserHandle.isSameApp(callingUid, pkgSetting.appId)) { if (!UserHandle.isSameApp(callingUid, pkgSetting.appId)) { // Don't allow apps that don't have permission to modify other apps // Don't allow apps that don't have permission to modify other apps if (!allowedByPermission) { if (!allowedByPermission || filterAppAccessLPr(pkgSetting, callingUid, userId)) { throw new SecurityException( throw new SecurityException( "Attempt to change component state; " "Attempt to change component state; " + "pid=" + Binder.getCallingPid() + "pid=" + Binder.getCallingPid() Loading Loading @@ -21321,7 +21347,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } } } scheduleWritePackageRestrictionsLocked(userId); scheduleWritePackageRestrictionsLocked(userId); updateSequenceNumberLP(packageName, new int[] { userId }); updateSequenceNumberLP(pkgSetting, new int[] { userId }); final long callingId = Binder.clearCallingIdentity(); final long callingId = Binder.clearCallingIdentity(); try { try { updateInstantAppInstallerLocked(packageName); updateInstantAppInstallerLocked(packageName); Loading Loading @@ -21418,7 +21444,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); true /* requireFullPermission */, true /* checkShell */, "stop package"); true /* requireFullPermission */, true /* checkShell */, "stop package"); // writer // writer synchronized (mPackages) { synchronized (mPackages) { if (mSettings.setPackageStoppedStateLPw(this, packageName, stopped, final PackageSetting ps = mSettings.mPackages.get(packageName); if (!filterAppAccessLPr(ps, callingUid, userId) && mSettings.setPackageStoppedStateLPw(this, packageName, stopped, allowedByPermission, callingUid, userId)) { allowedByPermission, callingUid, userId)) { scheduleWritePackageRestrictionsLocked(userId); scheduleWritePackageRestrictionsLocked(userId); } } Loading @@ -21427,11 +21455,16 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); @Override @Override public String getInstallerPackageName(String packageName) { public String getInstallerPackageName(String packageName) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { return null; return null; } } // reader // reader synchronized (mPackages) { synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) { return null; } return mSettings.getInstallerPackageNameLPr(packageName); return mSettings.getInstallerPackageNameLPr(packageName); } } } } Loading Loading @@ -24183,7 +24216,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); @Override @Override public boolean isPackageSignedByKeySet(String packageName, KeySet ks) { public boolean isPackageSignedByKeySet(String packageName, KeySet ks) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { return false; return false; } } if (packageName == null || ks == null) { if (packageName == null || ks == null) { Loading @@ -24191,7 +24225,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } synchronized(mPackages) { synchronized(mPackages) { final PackageParser.Package pkg = mPackages.get(packageName); final PackageParser.Package pkg = mPackages.get(packageName); if (pkg == null) { if (pkg == null || filterAppAccessLPr((PackageSetting) pkg.mExtras, callingUid, UserHandle.getUserId(callingUid))) { Slog.w(TAG, "KeySet requested for unknown package: " + packageName); Slog.w(TAG, "KeySet requested for unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } } Loading @@ -24206,7 +24242,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); @Override @Override public boolean isPackageSignedByKeySetExactly(String packageName, KeySet ks) { public boolean isPackageSignedByKeySetExactly(String packageName, KeySet ks) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { return false; return false; } } if (packageName == null || ks == null) { if (packageName == null || ks == null) { Loading @@ -24214,7 +24251,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } synchronized(mPackages) { synchronized(mPackages) { final PackageParser.Package pkg = mPackages.get(packageName); final PackageParser.Package pkg = mPackages.get(packageName); if (pkg == null) { if (pkg == null || filterAppAccessLPr((PackageSetting) pkg.mExtras, callingUid, UserHandle.getUserId(callingUid))) { Slog.w(TAG, "KeySet requested for unknown package: " + packageName); Slog.w(TAG, "KeySet requested for unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } } Loading
services/core/java/com/android/server/pm/PackageManagerService.java +102 −63 Original line number Original line Diff line number Diff line Loading @@ -2188,12 +2188,12 @@ public class PackageManagerService extends IPackageManager.Stub private void grantRequestedRuntimePermissionsForUser(PackageParser.Package pkg, int userId, private void grantRequestedRuntimePermissionsForUser(PackageParser.Package pkg, int userId, String[] grantedPermissions) { String[] grantedPermissions) { SettingBase sb = (SettingBase) pkg.mExtras; PackageSetting ps = (PackageSetting) pkg.mExtras; if (sb == null) { if (ps == null) { return; return; } } PermissionsState permissionsState = sb.getPermissionsState(); PermissionsState permissionsState = ps.getPermissionsState(); final int immutableFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED final int immutableFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED | PackageManager.FLAG_PERMISSION_POLICY_FIXED; | PackageManager.FLAG_PERMISSION_POLICY_FIXED; Loading Loading @@ -3517,7 +3517,7 @@ public class PackageManagerService extends IPackageManager.Stub * and {@code 0}</li> * and {@code 0}</li> * <li>The calling application has the permission * <li>The calling application has the permission * {@link android.Manifest.permission#ACCESS_INSTANT_APPS}</li> * {@link android.Manifest.permission#ACCESS_INSTANT_APPS}</li> * <li>[TODO] The calling application is the default launcher on the * <li>The calling application is the default launcher on the * system partition.</li> * system partition.</li> * </ol> * </ol> */ */ Loading Loading @@ -4905,9 +4905,13 @@ public class PackageManagerService extends IPackageManager.Stub } } } } private void updateSequenceNumberLP(String packageName, int[] userList) { private void updateSequenceNumberLP(PackageSetting pkgSetting, int[] userList) { for (int i = userList.length - 1; i >= 0; --i) { for (int i = userList.length - 1; i >= 0; --i) { final int userId = userList[i]; final int userId = userList[i]; // don't add instant app to the list of updates if (pkgSetting.getInstantApp(userId)) { continue; } SparseArray<String> changedPackages = mChangedPackages.get(userId); SparseArray<String> changedPackages = mChangedPackages.get(userId); if (changedPackages == null) { if (changedPackages == null) { changedPackages = new SparseArray<>(); changedPackages = new SparseArray<>(); Loading @@ -4918,12 +4922,12 @@ public class PackageManagerService extends IPackageManager.Stub sequenceNumbers = new HashMap<>(); sequenceNumbers = new HashMap<>(); mChangedPackagesSequenceNumbers.put(userId, sequenceNumbers); mChangedPackagesSequenceNumbers.put(userId, sequenceNumbers); } } final Integer sequenceNumber = sequenceNumbers.get(packageName); final Integer sequenceNumber = sequenceNumbers.get(pkgSetting.name); if (sequenceNumber != null) { if (sequenceNumber != null) { changedPackages.remove(sequenceNumber); changedPackages.remove(sequenceNumber); } } changedPackages.put(mChangedPackagesSequenceNumber, packageName); changedPackages.put(mChangedPackagesSequenceNumber, pkgSetting.name); sequenceNumbers.put(packageName, mChangedPackagesSequenceNumber); sequenceNumbers.put(pkgSetting.name, mChangedPackagesSequenceNumber); } } mChangedPackagesSequenceNumber++; mChangedPackagesSequenceNumber++; } } Loading Loading @@ -5365,7 +5369,7 @@ public class PackageManagerService extends IPackageManager.Stub "grantRuntimePermission"); "grantRuntimePermission"); final int uid; final int uid; final SettingBase sb; final PackageSetting ps; synchronized (mPackages) { synchronized (mPackages) { final PackageParser.Package pkg = mPackages.get(packageName); final PackageParser.Package pkg = mPackages.get(packageName); Loading @@ -5376,12 +5380,9 @@ public class PackageManagerService extends IPackageManager.Stub if (bp == null) { if (bp == null) { throw new IllegalArgumentException("Unknown permission: " + name); throw new IllegalArgumentException("Unknown permission: " + name); } } sb = (SettingBase) pkg.mExtras; ps = (PackageSetting) pkg.mExtras; if (sb == null) { if (ps == null throw new IllegalArgumentException("Unknown package: " + packageName); || filterAppAccessLPr(ps, callingUid, userId)) { } if (sb instanceof PackageSetting && filterAppAccessLPr((PackageSetting) sb, callingUid, userId)) { throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } } Loading @@ -5399,7 +5400,7 @@ public class PackageManagerService extends IPackageManager.Stub uid = UserHandle.getUid(userId, pkg.applicationInfo.uid); uid = UserHandle.getUid(userId, pkg.applicationInfo.uid); final PermissionsState permissionsState = sb.getPermissionsState(); final PermissionsState permissionsState = ps.getPermissionsState(); final int flags = permissionsState.getPermissionFlags(name, userId); final int flags = permissionsState.getPermissionFlags(name, userId); if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) { if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) { Loading @@ -5421,7 +5422,6 @@ public class PackageManagerService extends IPackageManager.Stub return; return; } } final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps.getInstantApp(userId) && !bp.isInstant()) { if (ps.getInstantApp(userId) && !bp.isInstant()) { throw new SecurityException("Cannot grant non-ephemeral permission" throw new SecurityException("Cannot grant non-ephemeral permission" + name + " for package " + packageName); + name + " for package " + packageName); Loading Loading @@ -5505,7 +5505,11 @@ public class PackageManagerService extends IPackageManager.Stub if (pkg == null) { if (pkg == null) { throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } } final PackageSetting ps = (PackageSetting) pkg.mExtras; if (ps == null || filterAppAccessLPr(ps, Binder.getCallingUid(), userId)) { throw new IllegalArgumentException("Unknown package: " + packageName); } final BasePermission bp = mSettings.mPermissions.get(name); final BasePermission bp = mSettings.mPermissions.get(name); if (bp == null) { if (bp == null) { throw new IllegalArgumentException("Unknown permission: " + name); throw new IllegalArgumentException("Unknown permission: " + name); Loading @@ -5523,12 +5527,7 @@ public class PackageManagerService extends IPackageManager.Stub return; return; } } SettingBase sb = (SettingBase) pkg.mExtras; final PermissionsState permissionsState = ps.getPermissionsState(); if (sb == null) { throw new IllegalArgumentException("Unknown package: " + packageName); } final PermissionsState permissionsState = sb.getPermissionsState(); final int flags = permissionsState.getPermissionFlags(name, userId); final int flags = permissionsState.getPermissionFlags(name, userId); if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) { if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) { Loading Loading @@ -5681,15 +5680,12 @@ public class PackageManagerService extends IPackageManager.Stub if (bp == null) { if (bp == null) { return 0; return 0; } } final SettingBase sb = (SettingBase) pkg.mExtras; final PackageSetting ps = (PackageSetting) pkg.mExtras; if (sb == null) { if (ps == null return 0; || filterAppAccessLPr(ps, callingUid, userId)) { } if (sb instanceof PackageSetting && filterAppAccessLPr((PackageSetting) sb, callingUid, userId)) { return 0; return 0; } } PermissionsState permissionsState = sb.getPermissionsState(); PermissionsState permissionsState = ps.getPermissionsState(); return permissionsState.getPermissionFlags(name, userId); return permissionsState.getPermissionFlags(name, userId); } } } } Loading @@ -5703,7 +5699,8 @@ public class PackageManagerService extends IPackageManager.Stub enforceGrantRevokeRuntimePermissionPermissions("updatePermissionFlags"); enforceGrantRevokeRuntimePermissionPermissions("updatePermissionFlags"); enforceCrossUserPermission(Binder.getCallingUid(), userId, final int callingUid = Binder.getCallingUid(); enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, true /* checkShell */, true /* requireFullPermission */, true /* checkShell */, "updatePermissionFlags"); "updatePermissionFlags"); Loading @@ -5721,18 +5718,18 @@ public class PackageManagerService extends IPackageManager.Stub if (pkg == null) { if (pkg == null) { throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } } final PackageSetting ps = (PackageSetting) pkg.mExtras; if (ps == null || filterAppAccessLPr(ps, callingUid, userId)) { throw new IllegalArgumentException("Unknown package: " + packageName); } final BasePermission bp = mSettings.mPermissions.get(name); final BasePermission bp = mSettings.mPermissions.get(name); if (bp == null) { if (bp == null) { throw new IllegalArgumentException("Unknown permission: " + name); throw new IllegalArgumentException("Unknown permission: " + name); } } SettingBase sb = (SettingBase) pkg.mExtras; PermissionsState permissionsState = ps.getPermissionsState(); if (sb == null) { throw new IllegalArgumentException("Unknown package: " + packageName); } PermissionsState permissionsState = sb.getPermissionsState(); boolean hadState = permissionsState.getRuntimePermissionState(name, userId) != null; boolean hadState = permissionsState.getRuntimePermissionState(name, userId) != null; Loading Loading @@ -5776,11 +5773,11 @@ public class PackageManagerService extends IPackageManager.Stub final int packageCount = mPackages.size(); final int packageCount = mPackages.size(); for (int pkgIndex = 0; pkgIndex < packageCount; pkgIndex++) { for (int pkgIndex = 0; pkgIndex < packageCount; pkgIndex++) { final PackageParser.Package pkg = mPackages.valueAt(pkgIndex); final PackageParser.Package pkg = mPackages.valueAt(pkgIndex); SettingBase sb = (SettingBase) pkg.mExtras; final PackageSetting ps = (PackageSetting) pkg.mExtras; if (sb == null) { if (ps == null) { continue; continue; } } PermissionsState permissionsState = sb.getPermissionsState(); PermissionsState permissionsState = ps.getPermissionsState(); changed |= permissionsState.updatePermissionFlagsForAllPermissions( changed |= permissionsState.updatePermissionFlagsForAllPermissions( userId, flagMask, flagValues); userId, flagMask, flagValues); } } Loading Loading @@ -9634,6 +9631,8 @@ public class PackageManagerService extends IPackageManager.Stub public void reconcileSecondaryDexFiles(String packageName) { public void reconcileSecondaryDexFiles(String packageName) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return; return; } else if (isInstantApp(packageName, UserHandle.getCallingUserId())) { return; } } mDexManager.reconcileSecondaryDexFiles(packageName); mDexManager.reconcileSecondaryDexFiles(packageName); } } Loading Loading @@ -14412,8 +14411,8 @@ public class PackageManagerService extends IPackageManager.Stub int userId) { int userId) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null); mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null); PackageSetting pkgSetting; PackageSetting pkgSetting; final int uid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid(); enforceCrossUserPermission(uid, userId, enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, true /* checkShell */, true /* requireFullPermission */, true /* checkShell */, "setApplicationHiddenSetting for user " + userId); "setApplicationHiddenSetting for user " + userId); Loading @@ -14432,6 +14431,9 @@ public class PackageManagerService extends IPackageManager.Stub if (pkgSetting == null) { if (pkgSetting == null) { return false; return false; } } if (filterAppAccessLPr(pkgSetting, callingUid, userId)) { return false; } // Do not allow "android" is being disabled // Do not allow "android" is being disabled if ("android".equals(packageName)) { if ("android".equals(packageName)) { Slog.w(TAG, "Cannot hide package: android"); Slog.w(TAG, "Cannot hide package: android"); Loading @@ -14448,7 +14450,7 @@ public class PackageManagerService extends IPackageManager.Stub return false; return false; } } // Only allow protected packages to hide themselves. // Only allow protected packages to hide themselves. if (hidden && !UserHandle.isSameApp(uid, pkgSetting.appId) if (hidden && !UserHandle.isSameApp(callingUid, pkgSetting.appId) && mProtectedPackages.isPackageStateProtected(userId, packageName)) { && mProtectedPackages.isPackageStateProtected(userId, packageName)) { Slog.w(TAG, "Not hiding protected package: " + packageName); Slog.w(TAG, "Not hiding protected package: " + packageName); return false; return false; Loading Loading @@ -14565,6 +14567,20 @@ public class PackageManagerService extends IPackageManager.Stub if (pkgSetting == null) { if (pkgSetting == null) { return PackageManager.INSTALL_FAILED_INVALID_URI; return PackageManager.INSTALL_FAILED_INVALID_URI; } } if (!canViewInstantApps(callingUid, UserHandle.getUserId(callingUid))) { // only allow the existing package to be used if it's installed as a full // application for at least one user boolean installAllowed = false; for (int checkUserId : sUserManager.getUserIds()) { installAllowed = !pkgSetting.getInstantApp(checkUserId); if (installAllowed) { break; } } if (!installAllowed) { return PackageManager.INSTALL_FAILED_INVALID_URI; } } if (!pkgSetting.getInstalled(userId)) { if (!pkgSetting.getInstalled(userId)) { pkgSetting.setInstalled(true, userId); pkgSetting.setInstalled(true, userId); pkgSetting.setHidden(false, userId); pkgSetting.setHidden(false, userId); Loading @@ -14588,7 +14604,7 @@ public class PackageManagerService extends IPackageManager.Stub } } sendPackageAddedForUser(packageName, pkgSetting, userId); sendPackageAddedForUser(packageName, pkgSetting, userId); synchronized (mPackages) { synchronized (mPackages) { updateSequenceNumberLP(packageName, new int[]{ userId }); updateSequenceNumberLP(pkgSetting, new int[]{ userId }); } } } } } finally { } finally { Loading Loading @@ -14634,7 +14650,8 @@ public class PackageManagerService extends IPackageManager.Stub public String[] setPackagesSuspendedAsUser(String[] packageNames, boolean suspended, public String[] setPackagesSuspendedAsUser(String[] packageNames, boolean suspended, int userId) { int userId) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null); mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null); enforceCrossUserPermission(Binder.getCallingUid(), userId, final int callingUid = Binder.getCallingUid(); enforceCrossUserPermission(callingUid, userId, true /* requireFullPermission */, true /* checkShell */, true /* requireFullPermission */, true /* checkShell */, "setPackagesSuspended for user " + userId); "setPackagesSuspended for user " + userId); Loading @@ -14655,7 +14672,8 @@ public class PackageManagerService extends IPackageManager.Stub final int appId; final int appId; synchronized (mPackages) { synchronized (mPackages) { final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); if (pkgSetting == null) { if (pkgSetting == null || filterAppAccessLPr(pkgSetting, callingUid, userId)) { Slog.w(TAG, "Could not find package setting for package \"" + packageName Slog.w(TAG, "Could not find package setting for package \"" + packageName + "\". Skipping suspending/un-suspending."); + "\". Skipping suspending/un-suspending."); unactionedPackages.add(packageName); unactionedPackages.add(packageName); Loading Loading @@ -15065,6 +15083,10 @@ public class PackageManagerService extends IPackageManager.Stub boolean result = false; boolean result = false; synchronized (mPackages) { synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (filterAppAccessLPr(ps, Binder.getCallingUid(), UserHandle.getCallingUserId())) { return false; } result = mSettings.updateIntentFilterVerificationStatusLPw(packageName, status, userId); result = mSettings.updateIntentFilterVerificationStatusLPw(packageName, status, userId); } } if (result) { if (result) { Loading Loading @@ -15165,7 +15187,9 @@ public class PackageManagerService extends IPackageManager.Stub // writer // writer synchronized (mPackages) { synchronized (mPackages) { PackageSetting targetPackageSetting = mSettings.mPackages.get(targetPackage); PackageSetting targetPackageSetting = mSettings.mPackages.get(targetPackage); if (targetPackageSetting == null) { if (targetPackageSetting == null || filterAppAccessLPr( targetPackageSetting, callingUid, UserHandle.getUserId(callingUid))) { throw new IllegalArgumentException("Unknown target package: " + targetPackage); throw new IllegalArgumentException("Unknown target package: " + targetPackage); } } Loading Loading @@ -15246,7 +15270,9 @@ public class PackageManagerService extends IPackageManager.Stub if (ps == null) { if (ps == null) { throw new IllegalArgumentException("Unknown target package " + packageName); throw new IllegalArgumentException("Unknown target package " + packageName); } } if (filterAppAccessLPr(ps, Binder.getCallingUid(), UserHandle.getCallingUserId())) { throw new IllegalArgumentException("Unknown target package " + packageName); } if (!Objects.equals(callerPackageName, ps.installerPackageName)) { if (!Objects.equals(callerPackageName, ps.installerPackageName)) { throw new IllegalArgumentException("Calling package " + callerPackageName throw new IllegalArgumentException("Calling package " + callerPackageName + " is not installer for " + packageName); + " is not installer for " + packageName); Loading Loading @@ -18268,7 +18294,7 @@ public class PackageManagerService extends IPackageManager.Stub } } if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) { if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) { updateSequenceNumberLP(pkgName, res.newUsers); updateSequenceNumberLP(ps, res.newUsers); updateInstantAppInstallerLocked(pkgName); updateInstantAppInstallerLocked(pkgName); } } } } Loading Loading @@ -18494,8 +18520,7 @@ public class PackageManagerService extends IPackageManager.Stub final int callingUid = Binder.getCallingUid(); final int callingUid = Binder.getCallingUid(); mContext.enforceCallingOrSelfPermission( mContext.enforceCallingOrSelfPermission( android.Manifest.permission.DELETE_PACKAGES, null); android.Manifest.permission.DELETE_PACKAGES, null); final int hasAccessInstantApps = mContext.checkCallingOrSelfPermission( final boolean canViewInstantApps = canViewInstantApps(callingUid, userId); android.Manifest.permission.ACCESS_INSTANT_APPS); Preconditions.checkNotNull(versionedPackage); Preconditions.checkNotNull(versionedPackage); Preconditions.checkNotNull(observer); Preconditions.checkNotNull(observer); Preconditions.checkArgumentInRange(versionedPackage.getVersionCode(), Preconditions.checkArgumentInRange(versionedPackage.getVersionCode(), Loading Loading @@ -18566,7 +18591,7 @@ public class PackageManagerService extends IPackageManager.Stub final boolean targetIsInstantApp = final boolean targetIsInstantApp = ps.getInstantApp(UserHandle.getUserId(callingUid)); ps.getInstantApp(UserHandle.getUserId(callingUid)); doDeletePackage = !targetIsInstantApp doDeletePackage = !targetIsInstantApp || hasAccessInstantApps == PackageManager.PERMISSION_GRANTED; || canViewInstantApps; } } if (doDeletePackage) { if (doDeletePackage) { if (!deleteAllUsers) { if (!deleteAllUsers) { Loading Loading @@ -18877,7 +18902,7 @@ public class PackageManagerService extends IPackageManager.Stub if (pkg != null) { if (pkg != null) { mInstantAppRegistry.onPackageUninstalledLPw(pkg, info.removedUsers); mInstantAppRegistry.onPackageUninstalledLPw(pkg, info.removedUsers); } } updateSequenceNumberLP(packageName, info.removedUsers); updateSequenceNumberLP(uninstalledPs, info.removedUsers); updateInstantAppInstallerLocked(packageName); updateInstantAppInstallerLocked(packageName); } } } } Loading Loading @@ -21234,7 +21259,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); // Limit who can change which apps // Limit who can change which apps if (!UserHandle.isSameApp(callingUid, pkgSetting.appId)) { if (!UserHandle.isSameApp(callingUid, pkgSetting.appId)) { // Don't allow apps that don't have permission to modify other apps // Don't allow apps that don't have permission to modify other apps if (!allowedByPermission) { if (!allowedByPermission || filterAppAccessLPr(pkgSetting, callingUid, userId)) { throw new SecurityException( throw new SecurityException( "Attempt to change component state; " "Attempt to change component state; " + "pid=" + Binder.getCallingPid() + "pid=" + Binder.getCallingPid() Loading Loading @@ -21321,7 +21347,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } } } scheduleWritePackageRestrictionsLocked(userId); scheduleWritePackageRestrictionsLocked(userId); updateSequenceNumberLP(packageName, new int[] { userId }); updateSequenceNumberLP(pkgSetting, new int[] { userId }); final long callingId = Binder.clearCallingIdentity(); final long callingId = Binder.clearCallingIdentity(); try { try { updateInstantAppInstallerLocked(packageName); updateInstantAppInstallerLocked(packageName); Loading Loading @@ -21418,7 +21444,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); true /* requireFullPermission */, true /* checkShell */, "stop package"); true /* requireFullPermission */, true /* checkShell */, "stop package"); // writer // writer synchronized (mPackages) { synchronized (mPackages) { if (mSettings.setPackageStoppedStateLPw(this, packageName, stopped, final PackageSetting ps = mSettings.mPackages.get(packageName); if (!filterAppAccessLPr(ps, callingUid, userId) && mSettings.setPackageStoppedStateLPw(this, packageName, stopped, allowedByPermission, callingUid, userId)) { allowedByPermission, callingUid, userId)) { scheduleWritePackageRestrictionsLocked(userId); scheduleWritePackageRestrictionsLocked(userId); } } Loading @@ -21427,11 +21455,16 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); @Override @Override public String getInstallerPackageName(String packageName) { public String getInstallerPackageName(String packageName) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { return null; return null; } } // reader // reader synchronized (mPackages) { synchronized (mPackages) { final PackageSetting ps = mSettings.mPackages.get(packageName); if (filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) { return null; } return mSettings.getInstallerPackageNameLPr(packageName); return mSettings.getInstallerPackageNameLPr(packageName); } } } } Loading Loading @@ -24183,7 +24216,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); @Override @Override public boolean isPackageSignedByKeySet(String packageName, KeySet ks) { public boolean isPackageSignedByKeySet(String packageName, KeySet ks) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { return false; return false; } } if (packageName == null || ks == null) { if (packageName == null || ks == null) { Loading @@ -24191,7 +24225,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } synchronized(mPackages) { synchronized(mPackages) { final PackageParser.Package pkg = mPackages.get(packageName); final PackageParser.Package pkg = mPackages.get(packageName); if (pkg == null) { if (pkg == null || filterAppAccessLPr((PackageSetting) pkg.mExtras, callingUid, UserHandle.getUserId(callingUid))) { Slog.w(TAG, "KeySet requested for unknown package: " + packageName); Slog.w(TAG, "KeySet requested for unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } } Loading @@ -24206,7 +24242,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); @Override @Override public boolean isPackageSignedByKeySetExactly(String packageName, KeySet ks) { public boolean isPackageSignedByKeySetExactly(String packageName, KeySet ks) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { return false; return false; } } if (packageName == null || ks == null) { if (packageName == null || ks == null) { Loading @@ -24214,7 +24251,9 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } synchronized(mPackages) { synchronized(mPackages) { final PackageParser.Package pkg = mPackages.get(packageName); final PackageParser.Package pkg = mPackages.get(packageName); if (pkg == null) { if (pkg == null || filterAppAccessLPr((PackageSetting) pkg.mExtras, callingUid, UserHandle.getUserId(callingUid))) { Slog.w(TAG, "KeySet requested for unknown package: " + packageName); Slog.w(TAG, "KeySet requested for unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); throw new IllegalArgumentException("Unknown package: " + packageName); } }