diff options
Diffstat (limited to 'services')
3 files changed, 15 insertions, 5 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index fb6e9ed..95dc373 100755 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -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(); diff --git a/services/java/com/android/server/pm/PackageSetting.java b/services/java/com/android/server/pm/PackageSetting.java index b6f9f5b..b447861 100644 --- a/services/java/com/android/server/pm/PackageSetting.java +++ b/services/java/com/android/server/pm/PackageSetting.java @@ -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; + } } diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java index 92fc6a4..3b4393a 100644 --- a/services/java/com/android/server/pm/Settings.java +++ b/services/java/com/android/server/pm/Settings.java @@ -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); } |