From 3aeea1f25a901b2c8d41aee35af91cf415908f64 Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Tue, 5 Nov 2013 12:28:10 -0800 Subject: System package permission decls take precedence over 3rd party apps' In particular, if a 3rd party app tries to define a permission that turns out to be defined by system packages following an upgrade, the system package gets ownership and grants are re-evaluated on that basis. Bug 11242510 Change-Id: Id3a2b53d52750c629414cd8226e33e5e03dd0c54 --- .../java/com/android/server/pm/PackageManagerService.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'services/java/com/android/server/pm/PackageManagerService.java') diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 3d6b3c92dc1a..7291dd49a761 100755 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -4959,6 +4959,18 @@ public class PackageManagerService extends IPackageManager.Stub { permissionMap.put(p.info.name, bp); } if (bp.perm == null) { + if (bp.sourcePackage != null + && !bp.sourcePackage.equals(p.info.packageName)) { + // If this is a permission that was formerly defined by a non-system + // app, but is now defined by a system app (following an upgrade), + // discard the previous declaration and consider the system's to be + // canonical. + if (isSystemApp(p.owner)) { + Slog.i(TAG, "New decl " + p.owner + " of permission " + + p.info.name + " is system"); + bp.sourcePackage = null; + } + } if (bp.sourcePackage == null || bp.sourcePackage.equals(p.info.packageName)) { BasePermission tree = findPermissionTreeLP(p.info.name); -- cgit v1.2.3