summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-12-15 03:06:48 -0700
committerLinux Build Service Account <lnxbuild@localhost>2016-12-15 03:06:48 -0700
commit5c733cf77a1ee79bcfa35ecb1e0ffd709033f2ca (patch)
tree95a97885e67b28cad7bf80d13236d1b4320e030f
parentfa2e966c5c647e03db9d938a6acb2c2e7a3d9765 (diff)
parent20c90d3d72fe6e3b092e1e779ff2d0ac4569cd38 (diff)
downloadandroid_system_keymaster-staging/cm-14.1-cafrebase.tar.gz
android_system_keymaster-staging/cm-14.1-cafrebase.tar.bz2
android_system_keymaster-staging/cm-14.1-cafrebase.zip
Merge 20c90d3d72fe6e3b092e1e779ff2d0ac4569cd38 on remote branchstaging/cm-14.1-cafrebasecm-14.1_old
Change-Id: I958cc3185067b9ab6807bfd059919ba011033675
-rw-r--r--soft_keymaster_context.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/soft_keymaster_context.cpp b/soft_keymaster_context.cpp
index 087439a..10ce893 100644
--- a/soft_keymaster_context.cpp
+++ b/soft_keymaster_context.cpp
@@ -493,6 +493,21 @@ keymaster_error_t SoftKeymasterContext::UpgradeKeyBlob(const KeymasterKeyBlob& k
// Handle cases 1 & 2.
bool set_changed = false;
+
+ if (os_version_ == 0) {
+ // We need to allow "upgrading" OS version to zero, to support upgrading from proper
+ // numbered releases to unnumbered development and preview releases.
+
+ int key_os_version_pos = sw_enforced.find(TAG_OS_VERSION);
+ if (key_os_version_pos != -1) {
+ uint32_t key_os_version = sw_enforced[key_os_version_pos].integer;
+ if (key_os_version != 0) {
+ sw_enforced[key_os_version_pos].integer = os_version_;
+ set_changed = true;
+ }
+ }
+ }
+
if (!UpgradeIntegerTag(TAG_OS_VERSION, os_version_, &sw_enforced, &set_changed) ||
!UpgradeIntegerTag(TAG_OS_PATCHLEVEL, os_patchlevel_, &sw_enforced, &set_changed))
// One of the version fields would have been a downgrade. Not allowed.