Merge changes Iea24e5a1,If71385bc into oc-dev

am: 3834421c96

Change-Id: I691d03a8396d26193622f171f70f82d7aa91cea2
This commit is contained in:
Todd Kennedy
2017-06-08 05:54:33 +00:00
committed by android-build-merger

View File

@@ -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;
@@ -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>
*/ */
@@ -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<>();
@@ -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++;
} }
@@ -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);
@@ -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);
} }
@@ -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) {
@@ -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);
@@ -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);
@@ -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) {
@@ -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
|| filterAppAccessLPr(ps, callingUid, userId)) {
return 0; return 0;
} }
if (sb instanceof PackageSetting PermissionsState permissionsState = ps.getPermissionsState();
&& filterAppAccessLPr((PackageSetting) sb, callingUid, userId)) {
return 0;
}
PermissionsState permissionsState = sb.getPermissionsState();
return permissionsState.getPermissionFlags(name, userId); return permissionsState.getPermissionFlags(name, userId);
} }
} }
@@ -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");
@@ -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;
@@ -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);
} }
@@ -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);
} }
@@ -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);
@@ -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");
@@ -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;
@@ -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);
@@ -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 {
@@ -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);
@@ -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);
@@ -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) {
@@ -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);
} }
@@ -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);
@@ -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);
} }
} }
@@ -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(),
@@ -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) {
@@ -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);
} }
} }
@@ -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()
@@ -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);
@@ -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);
} }
@@ -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);
} }
} }
@@ -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) {
@@ -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);
} }
@@ -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) {
@@ -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);
} }