diff options
-rw-r--r-- | services/core/java/com/android/server/pm/PackageSignatures.java | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/PackageSignatures.java b/services/core/java/com/android/server/pm/PackageSignatures.java index 394cdee8f917..83f54f156750 100644 --- a/services/core/java/com/android/server/pm/PackageSignatures.java +++ b/services/core/java/com/android/server/pm/PackageSignatures.java @@ -174,7 +174,16 @@ class PackageSignatures { if (index >= 0 && index < readSignatures.size()) { Signature sig = readSignatures.get(index); if (sig != null) { - signatures.add(sig); + // An app using a shared signature in its signing lineage + // can have unique capabilities assigned to this previous + // signer; create a new instance of this Signature to ensure + // its flags do not overwrite those of the instance from + // readSignatures. + if (isPastSigs) { + signatures.add(new Signature(sig)); + } else { + signatures.add(sig); + } signatureParsed = true; } else { PackageManagerService.reportSettingsProblem(Log.WARN, |