Merge "Set libavb version into system property for Treble OTA"

This commit is contained in:
Bowgo Tsai 2017-04-15 05:49:24 +00:00 committed by Gerrit Code Review
commit e8311491da
3 changed files with 12 additions and 3 deletions

View file

@ -493,6 +493,10 @@ FsManagerAvbUniquePtr FsManagerAvbHandle::Open(const std::string& device_file_by
return nullptr;
}
// Sets the MAJOR.MINOR for init to set it into "ro.boot.avb_version".
avb_handle->avb_version_ =
android::base::StringPrintf("%d.%d", AVB_VERSION_MAJOR, AVB_VERSION_MINOR);
// Verifies vbmeta images against the digest passed from bootloader.
if (!avb_verifier->VerifyVbmetaImages(*avb_handle->avb_slot_data_)) {
LERROR << "VerifyVbmetaImages failed";

View file

@ -72,7 +72,8 @@ class FsManagerAvbHandle {
// Otherwise, returns false.
bool SetUpAvb(fstab_rec* fstab_entry, bool wait_for_verity_dev);
bool AvbHashtreeDisabled() { return status_ == kFsManagerAvbHandleHashtreeDisabled; }
bool hashtree_disabled() const { return status_ == kFsManagerAvbHandleHashtreeDisabled; }
const std::string& avb_version() const { return avb_version_; }
FsManagerAvbHandle(const FsManagerAvbHandle&) = delete; // no copy
FsManagerAvbHandle& operator=(const FsManagerAvbHandle&) = delete; // no assignment
@ -92,6 +93,7 @@ class FsManagerAvbHandle {
private:
AvbSlotVerifyData* avb_slot_data_;
FsManagerAvbHandleStatus status_;
std::string avb_version_;
};
#endif /* __CORE_FS_MGR_AVB_H */

View file

@ -1010,10 +1010,11 @@ static bool vboot_2_0_mount_partitions(const std::vector<fstab_rec*>& fstab_recs
return false;
}
setenv("INIT_AVB_VERSION", avb_handle->avb_version().c_str(), 1);
for (auto rec : fstab_recs) {
bool need_create_dm_device = false;
if (fs_mgr_is_avb(rec)) {
if (avb_handle->AvbHashtreeDisabled()) {
if (avb_handle->hashtree_disabled()) {
LOG(INFO) << "avb hashtree disabled for '" << rec->mount_point << "'";
} else if (avb_handle->SetUpAvb(rec, false /* wait_for_verity_dev */)) {
need_create_dm_device = true;
@ -1362,12 +1363,14 @@ int main(int argc, char** argv) {
property_set("ro.boottime.init.selinux", getenv("INIT_SELINUX_TOOK"));
// Set libavb version for Framework-only OTA match in Treble build.
property_set("ro.boot.init.avb_version", std::to_string(AVB_MAJOR_VERSION).c_str());
const char* avb_version = getenv("INIT_AVB_VERSION");
if (avb_version) property_set("ro.boot.avb_version", avb_version);
// Clean up our environment.
unsetenv("INIT_SECOND_STAGE");
unsetenv("INIT_STARTED_AT");
unsetenv("INIT_SELINUX_TOOK");
unsetenv("INIT_AVB_VERSION");
// Now set up SELinux for second stage.
selinux_initialize(false);