am d570dae5: Merge "Fix priv-app edge case across OTAs" into klp-dev
* commit 'd570dae5775be9df8ee218ce617c50e8097e6dcc': Fix priv-app edge case across OTAs
This commit is contained in:
@@ -5566,9 +5566,9 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
// version of the one on the data partition, but which
|
||||
// granted a new system permission that it didn't have
|
||||
// before. In this case we do want to allow the app to
|
||||
// now get the new permission if the new system-partition
|
||||
// apk is privileged to get it.
|
||||
if (sysPs.pkg != null && isPrivilegedApp(pkg)) {
|
||||
// now get the new permission if the ancestral apk is
|
||||
// privileged to get it.
|
||||
if (sysPs.pkg != null && sysPs.isPrivileged()) {
|
||||
for (int j=0;
|
||||
j<sysPs.pkg.requestedPermissions.size(); j++) {
|
||||
if (perm.equals(
|
||||
@@ -9370,7 +9370,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
boolean locationIsPrivileged(File path) {
|
||||
static boolean locationIsPrivileged(File path) {
|
||||
try {
|
||||
final String privilegedAppDir = new File(Environment.getRootDirectory(), "priv-app")
|
||||
.getCanonicalPath();
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.server.pm;
|
||||
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageParser;
|
||||
|
||||
import java.io.File;
|
||||
@@ -56,4 +57,8 @@ final class PackageSetting extends PackageSettingBase {
|
||||
public int[] getGids() {
|
||||
return sharedUser != null ? sharedUser.gids : gids;
|
||||
}
|
||||
|
||||
public boolean isPrivileged() {
|
||||
return (pkgFlags & ApplicationInfo.FLAG_PRIVILEGED) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2210,7 +2210,11 @@ final class Settings {
|
||||
|
||||
int pkgFlags = 0;
|
||||
pkgFlags |= ApplicationInfo.FLAG_SYSTEM;
|
||||
PackageSetting ps = new PackageSetting(name, realName, new File(codePathStr),
|
||||
final File codePathFile = new File(codePathStr);
|
||||
if (PackageManagerService.locationIsPrivileged(codePathFile)) {
|
||||
pkgFlags |= ApplicationInfo.FLAG_PRIVILEGED;
|
||||
}
|
||||
PackageSetting ps = new PackageSetting(name, realName, codePathFile,
|
||||
new File(resourcePathStr), nativeLibraryPathStr, versionCode, pkgFlags);
|
||||
String timeStampStr = parser.getAttributeValue(null, "ft");
|
||||
if (timeStampStr != null) {
|
||||
@@ -2266,6 +2270,7 @@ final class Settings {
|
||||
XmlUtils.skipCurrentTag(parser);
|
||||
}
|
||||
}
|
||||
|
||||
mDisabledSysPackages.put(name, ps);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user