Merge changes Iea24e5a1,If71385bc into oc-dev
am: 3834421c96
Change-Id: I691d03a8396d26193622f171f70f82d7aa91cea2
This commit is contained in:
@@ -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,8 +21444,10 @@ 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);
|
||||||
allowedByPermission, callingUid, userId)) {
|
if (!filterAppAccessLPr(ps, callingUid, userId)
|
||||||
|
&& mSettings.setPackageStoppedStateLPw(this, packageName, stopped,
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user