summaryrefslogtreecommitdiffstats
path: root/tools/releasetools
diff options
context:
space:
mode:
authorRicardo Cerqueira <cyanogenmod@cerqueira.org>2014-05-09 22:21:28 +0100
committerAdnan Begovic <adnan@cyngn.com>2015-10-06 16:33:25 -0700
commitc29149a1a25e43597cc6b965da9e0f88d6719a5a (patch)
tree3ae7ed71b2989aff9e82a5a8ba0e2c05cea28893 /tools/releasetools
parent137b73cd05b6678ea2c6a3ac8f4c8b13d9d048f2 (diff)
downloadbuild-c29149a1a25e43597cc6b965da9e0f88d6719a5a.zip
build-c29149a1a25e43597cc6b965da9e0f88d6719a5a.tar.gz
build-c29149a1a25e43597cc6b965da9e0f88d6719a5a.tar.bz2
ota: Make sure we don't install on top of an incompatible system
If the system has data present, make sure said data doesn't depend on a system signature different from our own. If we can't find our platform key, abort the installation Change-Id: I16572daf9464de326a9d0d126597cfbf03208f94
Diffstat (limited to 'tools/releasetools')
-rw-r--r--tools/releasetools/edify_generator.py11
-rwxr-xr-xtools/releasetools/ota_from_target_files6
2 files changed, 17 insertions, 0 deletions
diff --git a/tools/releasetools/edify_generator.py b/tools/releasetools/edify_generator.py
index 4acda35..2cff05b 100644
--- a/tools/releasetools/edify_generator.py
+++ b/tools/releasetools/edify_generator.py
@@ -147,6 +147,17 @@ class EdifyGenerator(object):
self.script.append('delete("/system/bin/backuptool.sh");')
self.script.append('delete("/system/bin/backuptool.functions");')
+ def ValidateSignatures(self, command):
+ if command == "cleanup":
+ self.script.append('delete("/system/bin/otasigcheck.sh");')
+ else:
+ self.script.append('package_extract_file("system/bin/otasigcheck.sh", "/tmp/otasigcheck.sh");')
+ self.script.append('package_extract_file("META-INF/org/cyanogenmod/releasekey", "/tmp/releasekey");')
+ self.script.append('set_metadata("/tmp/otasigcheck.sh", "uid", 0, "gid", 0, "mode", 0755);')
+ self.script.append('run_program("/tmp/otasigcheck.sh");')
+ ## Hax: a failure from run_program doesn't trigger an abort, so have it change the key value and check for "INVALID"
+ self.script.append('sha1_check(read_file("/tmp/releasekey"),"7241e92725436afc79389d4fc2333a2aa8c20230") && abort("Can\'t install this package on top of incompatible data. Please try another package or run a factory reset");')
+
def ShowProgress(self, frac, dur):
"""Update the progress bar, advancing it over 'frac' over the next
'dur' seconds. 'dur' may be zero to advance it via SetProgress
diff --git a/tools/releasetools/ota_from_target_files b/tools/releasetools/ota_from_target_files
index 3201587..230b803 100755
--- a/tools/releasetools/ota_from_target_files
+++ b/tools/releasetools/ota_from_target_files
@@ -586,6 +586,10 @@ else if get_stage("%(bcb_dev)s") == "3/3" then
device_specific.FullOTA_InstallBegin()
+ script.Mount("/data")
+ script.ValidateSignatures("data")
+ script.Unmount("/data")
+
if OPTIONS.backuptool:
script.Mount("/system")
script.RunBackup("backup")
@@ -662,6 +666,8 @@ else if get_stage("%(bcb_dev)s") == "3/3" then
common.CheckSize(boot_img.data, "boot.img", OPTIONS.info_dict)
common.ZipWriteStr(output_zip, "boot.img", boot_img.data)
+ script.ValidateSignatures("cleanup")
+
if OPTIONS.backuptool:
script.ShowProgress(0.02, 10)
script.RunBackup("restore")