summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Groover <mpgroover@google.com>2021-08-10 22:30:03 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-08-10 22:30:03 +0000
commit71f64ff1ac28bb6aecbf4f28f0e2c46fb7c73a2d (patch)
treece8e6b59e7d8cf09befc39cca71bcb3a9c6610e8
parent0f1dd468bd37d70ca391141dc10e799ae54213c9 (diff)
parent6c60c5c7c1cf671066838413c6d799e9df244bc0 (diff)
Merge "Create new instance of shared lineage signers to preserve capabilities" into sc-dev
-rw-r--r--services/core/java/com/android/server/pm/PackageSignatures.java11
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,