libavb: Add test for verifying veritymode is set to 'disabled'.
If the HASHTREE_DISABLED flag is set in the top-level vbmeta struct we
should set androidboot.veritymode=disabled no matter what is passed as
the AvbHashtreeErrorMode. Add unit test for checking this.
Bug: None
Test: New unit tests + all unit tests pass.
Test: Manually tested on UEFI-based boot loader.
Change-Id: I87c42b494562033954060fb270c064509beebc01
diff --git a/test/avb_slot_verify_unittest.cc b/test/avb_slot_verify_unittest.cc
index a51daf2..a940cfc 100644
--- a/test/avb_slot_verify_unittest.cc
+++ b/test/avb_slot_verify_unittest.cc
@@ -2033,6 +2033,46 @@
"androidboot.veritymode=logging",
std::string(slot_data->cmdline));
avb_slot_verify_data_free(slot_data);
+
+ // Check we'll get androidboot.veritymode=disabled for any
+ // |hashtree_error_mode| if dm-verity is disabled.
+ GenerateVBMetaImage("vbmeta.img",
+ "SHA256_RSA2048",
+ 0,
+ base::FilePath("test/data/testkey_rsa2048.pem"),
+ base::StringPrintf("--setup_rootfs_from_kernel %s "
+ "--include_descriptors_from_image %s "
+ "--set_hashtree_disabled_flag "
+ "--internal_release_string \"\"",
+ system_path.value().c_str(),
+ system_path.value().c_str()));
+ for (int n = 0; n < 4; n++) {
+ AvbHashtreeErrorMode modes[4] = {
+ AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE,
+ AVB_HASHTREE_ERROR_MODE_RESTART,
+ AVB_HASHTREE_ERROR_MODE_EIO,
+ AVB_HASHTREE_ERROR_MODE_LOGGING};
+ EXPECT_EQ(AVB_SLOT_VERIFY_RESULT_OK,
+ avb_slot_verify(ops_.avb_ops(),
+ requested_partitions,
+ "",
+ AVB_SLOT_VERIFY_FLAGS_ALLOW_VERIFICATION_ERROR,
+ modes[n],
+ &slot_data));
+ EXPECT_NE(nullptr, slot_data);
+ EXPECT_EQ(
+ "root=PARTUUID=1234-fake-guid-for:system "
+ "androidboot.vbmeta.device=PARTUUID=1234-fake-guid-for:vbmeta "
+ "androidboot.vbmeta.avb_version=1.0 "
+ "androidboot.vbmeta.device_state=locked "
+ "androidboot.vbmeta.hash_alg=sha256 "
+ "androidboot.vbmeta.size=1664 "
+ "androidboot.vbmeta.digest="
+ "e73a466d63f451dcf5c051ff12a32c006ba282a34b37420c0d563f0282cad703 "
+ "androidboot.veritymode=disabled",
+ std::string(slot_data->cmdline));
+ avb_slot_verify_data_free(slot_data);
+ }
}
} // namespace avb