flash: relax PMBR requirement with input image checks
The current image check requires both a PMBR and a GPT signature.
For the purposes of cros flash, we don't really care if there is a
PMBR installed as we don't use it in our firmware. Change the code
to optionally require the PMBR, and have cros flash itself to only
require the GPT signature.
BUG=b:33815587
TEST=`./flash_unittest` passes
Change-Id: I2046fac4d1c7a4a70110e210d7f1c913806ec22b
Reviewed-on: https://chromium-review.googlesource.com/422888
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Prathmesh Prabhu <pprabhu@chromium.org>
Reviewed-by: Ningning Xia <nxia@chromium.org>
Reviewed-by: Ian Coolidge <icoolidge@google.com>
diff --git a/cli/flash_unittest.py b/cli/flash_unittest.py
index 3b39f42..4c5d792 100644
--- a/cli/flash_unittest.py
+++ b/cli/flash_unittest.py
@@ -292,3 +292,26 @@
# image.
with self.PatchObject(cros_build_lib, 'GetChoice', return_value=2):
self.assertEqual(file_c, flash._ChooseImageFromDirectory(self.tempdir))
+
+ def testIsFilePathGPTDiskImage(self):
+ """Tests the GPT image probing."""
+ # pylint: disable=protected-access
+
+ INVALID_PMBR = ' ' * 0x200
+ INVALID_GPT = ' ' * 0x200
+ VALID_PMBR = (' ' * 0x1fe) + '\x55\xaa'
+ VALID_GPT = 'EFI PART' + (' ' * 0x1f8)
+ TESTCASES = (
+ (False, False, INVALID_PMBR + INVALID_GPT),
+ (False, False, VALID_PMBR + INVALID_GPT),
+ (False, True, INVALID_PMBR + VALID_GPT),
+ (True, True, VALID_PMBR + VALID_GPT),
+ )
+
+ img = os.path.join(self.tempdir, 'img.bin')
+ for exp_pmbr_t, exp_pmbr_f, data in TESTCASES:
+ osutils.WriteFile(img, data)
+ self.assertEqual(
+ flash._IsFilePathGPTDiskImage(img, require_pmbr=True), exp_pmbr_t)
+ self.assertEqual(
+ flash._IsFilePathGPTDiskImage(img, require_pmbr=False), exp_pmbr_f)