Loading init/init_first_stage.cpp +13 −2 Original line number Original line Diff line number Diff line Loading @@ -456,13 +456,20 @@ FirstStageMountVBootV2::FirstStageMountVBootV2() : avb_handle_(nullptr) { bool FirstStageMountVBootV2::GetDmVerityDevices() { bool FirstStageMountVBootV2::GetDmVerityDevices() { need_dm_verity_ = false; need_dm_verity_ = false; std::set<std::string> logical_partitions; // fstab_rec->blk_device has A/B suffix. // fstab_rec->blk_device has A/B suffix. for (auto fstab_rec : mount_fstab_recs_) { for (auto fstab_rec : mount_fstab_recs_) { if (fs_mgr_is_avb(fstab_rec)) { if (fs_mgr_is_avb(fstab_rec)) { need_dm_verity_ = true; need_dm_verity_ = true; } } if (fs_mgr_is_logical(fstab_rec)) { // Don't try to find logical partitions via uevent regeneration. logical_partitions.emplace(basename(fstab_rec->blk_device)); } else { required_devices_partition_names_.emplace(basename(fstab_rec->blk_device)); required_devices_partition_names_.emplace(basename(fstab_rec->blk_device)); } } } // libavb verifies AVB metadata on all verified partitions at once. // libavb verifies AVB metadata on all verified partitions at once. // e.g., The device_tree_vbmeta_parts_ will be "vbmeta,boot,system,vendor" // e.g., The device_tree_vbmeta_parts_ will be "vbmeta,boot,system,vendor" Loading @@ -476,11 +483,15 @@ bool FirstStageMountVBootV2::GetDmVerityDevices() { std::vector<std::string> partitions = android::base::Split(device_tree_vbmeta_parts_, ","); std::vector<std::string> partitions = android::base::Split(device_tree_vbmeta_parts_, ","); std::string ab_suffix = fs_mgr_get_slot_suffix(); std::string ab_suffix = fs_mgr_get_slot_suffix(); for (const auto& partition : partitions) { for (const auto& partition : partitions) { std::string partition_name = partition + ab_suffix; if (logical_partitions.count(partition_name)) { continue; } // required_devices_partition_names_ is of type std::set so it's not an issue // required_devices_partition_names_ is of type std::set so it's not an issue // to emplace a partition twice. e.g., /vendor might be in both places: // to emplace a partition twice. e.g., /vendor might be in both places: // - device_tree_vbmeta_parts_ = "vbmeta,boot,system,vendor" // - device_tree_vbmeta_parts_ = "vbmeta,boot,system,vendor" // - mount_fstab_recs_: /vendor_a // - mount_fstab_recs_: /vendor_a required_devices_partition_names_.emplace(partition + ab_suffix); required_devices_partition_names_.emplace(partition_name); } } } } return true; return true; Loading Loading
init/init_first_stage.cpp +13 −2 Original line number Original line Diff line number Diff line Loading @@ -456,13 +456,20 @@ FirstStageMountVBootV2::FirstStageMountVBootV2() : avb_handle_(nullptr) { bool FirstStageMountVBootV2::GetDmVerityDevices() { bool FirstStageMountVBootV2::GetDmVerityDevices() { need_dm_verity_ = false; need_dm_verity_ = false; std::set<std::string> logical_partitions; // fstab_rec->blk_device has A/B suffix. // fstab_rec->blk_device has A/B suffix. for (auto fstab_rec : mount_fstab_recs_) { for (auto fstab_rec : mount_fstab_recs_) { if (fs_mgr_is_avb(fstab_rec)) { if (fs_mgr_is_avb(fstab_rec)) { need_dm_verity_ = true; need_dm_verity_ = true; } } if (fs_mgr_is_logical(fstab_rec)) { // Don't try to find logical partitions via uevent regeneration. logical_partitions.emplace(basename(fstab_rec->blk_device)); } else { required_devices_partition_names_.emplace(basename(fstab_rec->blk_device)); required_devices_partition_names_.emplace(basename(fstab_rec->blk_device)); } } } // libavb verifies AVB metadata on all verified partitions at once. // libavb verifies AVB metadata on all verified partitions at once. // e.g., The device_tree_vbmeta_parts_ will be "vbmeta,boot,system,vendor" // e.g., The device_tree_vbmeta_parts_ will be "vbmeta,boot,system,vendor" Loading @@ -476,11 +483,15 @@ bool FirstStageMountVBootV2::GetDmVerityDevices() { std::vector<std::string> partitions = android::base::Split(device_tree_vbmeta_parts_, ","); std::vector<std::string> partitions = android::base::Split(device_tree_vbmeta_parts_, ","); std::string ab_suffix = fs_mgr_get_slot_suffix(); std::string ab_suffix = fs_mgr_get_slot_suffix(); for (const auto& partition : partitions) { for (const auto& partition : partitions) { std::string partition_name = partition + ab_suffix; if (logical_partitions.count(partition_name)) { continue; } // required_devices_partition_names_ is of type std::set so it's not an issue // required_devices_partition_names_ is of type std::set so it's not an issue // to emplace a partition twice. e.g., /vendor might be in both places: // to emplace a partition twice. e.g., /vendor might be in both places: // - device_tree_vbmeta_parts_ = "vbmeta,boot,system,vendor" // - device_tree_vbmeta_parts_ = "vbmeta,boot,system,vendor" // - mount_fstab_recs_: /vendor_a // - mount_fstab_recs_: /vendor_a required_devices_partition_names_.emplace(partition + ab_suffix); required_devices_partition_names_.emplace(partition_name); } } } } return true; return true; Loading