diff options
author | Michael Groover <mpgroover@google.com> | 2021-08-10 22:30:03 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-08-10 22:30:03 +0000 |
commit | 71f64ff1ac28bb6aecbf4f28f0e2c46fb7c73a2d (patch) | |
tree | ce8e6b59e7d8cf09befc39cca71bcb3a9c6610e8 | |
parent | 0f1dd468bd37d70ca391141dc10e799ae54213c9 (diff) | |
parent | 6c60c5c7c1cf671066838413c6d799e9df244bc0 (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.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, |