Add vbmeta_system_dlkm to cuttlefish
We are preparing for packing/unpacking system_dlkm at assmble_cvd time.
To make modifying system_dlkm.img easier, add a separte vbmeta partition
for system_dlkm
Bug: 273752147
Test: launch_cvd
Change-Id: I2e99a070755233385c293f271a2c0251bc475343
diff --git a/host/commands/assemble_cvd/disk_flags.cc b/host/commands/assemble_cvd/disk_flags.cc
index 585d726..4c9b892 100644
--- a/host/commands/assemble_cvd/disk_flags.cc
+++ b/host/commands/assemble_cvd/disk_flags.cc
@@ -84,6 +84,12 @@
"to "
"be vbmeta_vendor_dlkm.img in the directory specified by "
"-system_image_dir.");
+DEFINE_string(
+ vbmeta_system_dlkm_image, CF_DEFAULTS_VBMETA_SYSTEM_DLKM_IMAGE,
+ "Location of cuttlefish vbmeta_system_dlkm image. If empty it is assumed "
+ "to "
+ "be vbmeta_system_dlkm.img in the directory specified by "
+ "-system_image_dir.");
DEFINE_string(linux_kernel_path, CF_DEFAULTS_LINUX_KERNEL_PATH,
"Location of linux kernel for cuttlefish otheros flow.");
@@ -138,6 +144,7 @@
std::string default_vbmeta_image = "";
std::string default_vbmeta_system_image = "";
std::string default_vbmeta_vendor_dlkm_image = "";
+ std::string default_vbmeta_system_dlkm_image = "";
std::string cur_system_image_dir;
std::string comma_str = "";
@@ -169,6 +176,8 @@
default_vbmeta_system_image += comma_str + cur_system_image_dir + "/vbmeta_system.img";
default_vbmeta_vendor_dlkm_image +=
comma_str + cur_system_image_dir + "/vbmeta_vendor_dlkm.img";
+ default_vbmeta_system_dlkm_image +=
+ comma_str + cur_system_image_dir + "/vbmeta_system_dlkm.img";
}
SetCommandLineOptionWithMode("boot_image", default_boot_image.c_str(),
google::FlagSettingMode::SET_FLAGS_DEFAULT);
@@ -196,6 +205,9 @@
SetCommandLineOptionWithMode("vbmeta_vendor_dlkm_image",
default_vbmeta_vendor_dlkm_image.c_str(),
google::FlagSettingMode::SET_FLAGS_DEFAULT);
+ SetCommandLineOptionWithMode("vbmeta_system_dlkm_image",
+ default_vbmeta_system_dlkm_image.c_str(),
+ google::FlagSettingMode::SET_FLAGS_DEFAULT);
return {};
}
@@ -311,6 +323,22 @@
.read_only = FLAGS_use_overlay,
});
}
+ auto vbmeta_system_dlkm_img = instance.new_vbmeta_system_dlkm_image();
+ if (!FileExists(vbmeta_system_dlkm_img)) {
+ vbmeta_system_dlkm_img = instance.vbmeta_system_dlkm_image();
+ }
+ if (FileExists(vbmeta_system_dlkm_img)) {
+ partitions.push_back(ImagePartition{
+ .label = "vbmeta_system_dlkm_a",
+ .image_file_path = AbsolutePath(vbmeta_system_dlkm_img),
+ .read_only = FLAGS_use_overlay,
+ });
+ partitions.push_back(ImagePartition{
+ .label = "vbmeta_system_dlkm_b",
+ .image_file_path = AbsolutePath(vbmeta_system_dlkm_img),
+ .read_only = FLAGS_use_overlay,
+ });
+ }
auto super_image = instance.new_super_image();
if (!FileExists(super_image)) {
super_image = instance.super_image();
@@ -1123,7 +1151,7 @@
// provide a partition which matches this or the read will fail
for (const auto& vbmeta_image :
{instance_.vbmeta_image(), instance_.vbmeta_system_image(),
- instance_.vbmeta_vendor_dlkm_image()}) {
+ instance_.vbmeta_vendor_dlkm_image(), instance_.vbmeta_system_dlkm_image()}) {
// In some configurations of cuttlefish, the vendor dlkm vbmeta image does
// not exist
if (FileExists(vbmeta_image) && FileSize(vbmeta_image) != VBMETA_MAX_SIZE) {
@@ -1221,6 +1249,8 @@
android::base::Split(FLAGS_vbmeta_system_image, ",");
auto vbmeta_vendor_dlkm_image =
android::base::Split(FLAGS_vbmeta_vendor_dlkm_image, ",");
+ auto vbmeta_system_dlkm_image =
+ android::base::Split(FLAGS_vbmeta_system_dlkm_image, ",");
std::vector<std::string> linux_kernel_path =
android::base::Split(FLAGS_linux_kernel_path, ",");
@@ -1308,12 +1338,18 @@
} else {
instance.set_vbmeta_system_image(vbmeta_system_image[instance_index]);
}
- if (instance_index >= vbmeta_system_image.size()) {
+ if (instance_index >= vbmeta_vendor_dlkm_image.size()) {
instance.set_vbmeta_vendor_dlkm_image(vbmeta_vendor_dlkm_image[0]);
} else {
instance.set_vbmeta_vendor_dlkm_image(
vbmeta_vendor_dlkm_image[instance_index]);
}
+ if (instance_index >= vbmeta_system_dlkm_image.size()) {
+ instance.set_vbmeta_system_dlkm_image(vbmeta_system_dlkm_image[0]);
+ } else {
+ instance.set_vbmeta_system_dlkm_image(
+ vbmeta_system_dlkm_image[instance_index]);
+ }
if (instance_index >= super_image.size()) {
cur_super_image = super_image[0];
} else {
diff --git a/host/commands/assemble_cvd/flags_defaults.h b/host/commands/assemble_cvd/flags_defaults.h
index 8ae1f12..0320089 100644
--- a/host/commands/assemble_cvd/flags_defaults.h
+++ b/host/commands/assemble_cvd/flags_defaults.h
@@ -113,6 +113,7 @@
#define CF_DEFAULTS_VBMETA_IMAGE CF_DEFAULTS_DYNAMIC_STRING
#define CF_DEFAULTS_VBMETA_SYSTEM_IMAGE CF_DEFAULTS_DYNAMIC_STRING
#define CF_DEFAULTS_VBMETA_VENDOR_DLKM_IMAGE CF_DEFAULTS_DYNAMIC_STRING
+#define CF_DEFAULTS_VBMETA_SYSTEM_DLKM_IMAGE CF_DEFAULTS_DYNAMIC_STRING
#define CF_DEFAULTS_VENDOR_BOOT_IMAGE CF_DEFAULTS_DYNAMIC_STRING
// Policy default parameters
diff --git a/host/libs/config/cuttlefish_config.h b/host/libs/config/cuttlefish_config.h
index 148d4ba..5b0e4fb 100644
--- a/host/libs/config/cuttlefish_config.h
+++ b/host/libs/config/cuttlefish_config.h
@@ -554,6 +554,8 @@
std::string vbmeta_system_image() const;
std::string vbmeta_vendor_dlkm_image() const;
std::string new_vbmeta_vendor_dlkm_image() const;
+ std::string vbmeta_system_dlkm_image() const;
+ std::string new_vbmeta_system_dlkm_image() const;
// otheros artifacts
std::string otheros_esp_image() const;
@@ -728,6 +730,10 @@
const std::string& vbmeta_vendor_dlkm_image);
void set_new_vbmeta_vendor_dlkm_image(
const std::string& vbmeta_vendor_dlkm_image);
+ void set_vbmeta_system_dlkm_image(
+ const std::string& vbmeta_system_dlkm_image);
+ void set_new_vbmeta_system_dlkm_image(
+ const std::string& vbmeta_system_dlkm_image);
void set_otheros_esp_image(const std::string& otheros_esp_image);
void set_linux_kernel_path(const std::string& linux_kernel_path);
void set_linux_initramfs_path(const std::string& linux_initramfs_path);
diff --git a/host/libs/config/cuttlefish_config_instance.cpp b/host/libs/config/cuttlefish_config_instance.cpp
index 18912ef..567b322 100644
--- a/host/libs/config/cuttlefish_config_instance.cpp
+++ b/host/libs/config/cuttlefish_config_instance.cpp
@@ -207,6 +207,25 @@
set_new_vbmeta_vendor_dlkm_image(const std::string& image) {
(*Dictionary())[kNewVbmetaVendorDlkmImage] = image;
}
+static constexpr char kVbmetaSystemDlkmImage[] = "vbmeta_system_dlkm_image";
+std::string CuttlefishConfig::InstanceSpecific::vbmeta_system_dlkm_image()
+ const {
+ return (*Dictionary())[kVbmetaSystemDlkmImage].asString();
+}
+void CuttlefishConfig::MutableInstanceSpecific::set_vbmeta_system_dlkm_image(
+ const std::string& image) {
+ (*Dictionary())[kVbmetaSystemDlkmImage] = image;
+}
+static constexpr char kNewVbmetaSystemDlkmImage[] =
+ "new_vbmeta_system_dlkm_image";
+std::string CuttlefishConfig::InstanceSpecific::new_vbmeta_system_dlkm_image()
+ const {
+ return (*Dictionary())[kNewVbmetaSystemDlkmImage].asString();
+}
+void CuttlefishConfig::MutableInstanceSpecific::
+ set_new_vbmeta_system_dlkm_image(const std::string& image) {
+ (*Dictionary())[kNewVbmetaSystemDlkmImage] = image;
+}
static constexpr char kOtherosEspImage[] = "otheros_esp_image";
std::string CuttlefishConfig::InstanceSpecific::otheros_esp_image() const {
return (*Dictionary())[kOtherosEspImage].asString();
diff --git a/required_images b/required_images
index 7ae2fef..ab6c2c0 100644
--- a/required_images
+++ b/required_images
@@ -6,4 +6,5 @@
vbmeta.img
vbmeta_system.img
vbmeta_vendor_dlkm.img
+vbmeta_system_dlkm.img
vendor_boot.img
diff --git a/shared/BoardConfig.mk b/shared/BoardConfig.mk
index 26f7bed..a835cf5 100644
--- a/shared/BoardConfig.mk
+++ b/shared/BoardConfig.mk
@@ -148,13 +148,19 @@
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX_LOCATION := 3
# Enabled chained vbmeta for vendor_dlkm
-BOARD_AVB_VBMETA_CUSTOM_PARTITIONS := vendor_dlkm
+BOARD_AVB_VBMETA_CUSTOM_PARTITIONS := vendor_dlkm system_dlkm
BOARD_AVB_VBMETA_VENDOR_DLKM := vendor_dlkm
BOARD_AVB_VBMETA_VENDOR_DLKM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_VBMETA_VENDOR_DLKM_ALGORITHM := SHA256_RSA4096
BOARD_AVB_VBMETA_VENDOR_DLKM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_VBMETA_VENDOR_DLKM_ROLLBACK_INDEX_LOCATION := 4
+BOARD_AVB_VBMETA_SYSTEM_DLKM := system_dlkm
+BOARD_AVB_VBMETA_SYSTEM_DLKM_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
+BOARD_AVB_VBMETA_SYSTEM_DLKM_ALGORITHM := SHA256_RSA4096
+BOARD_AVB_VBMETA_SYSTEM_DLKM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
+BOARD_AVB_VBMETA_SYSTEM_DLKM_ROLLBACK_INDEX_LOCATION := 5
+
# Using sha256 for dm-verity partitions. b/178983355
# system, system_other, product.
diff --git a/shared/config/fstab.in b/shared/config/fstab.in
index baea40d..c14c0ff 100644
--- a/shared/config/fstab.in
+++ b/shared/config/fstab.in
@@ -21,8 +21,8 @@
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb=vbmeta_vendor_dlkm
odm_dlkm /odm_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
-system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta
-system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb=vbmeta
+system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb=vbmeta_system_dlkm
+system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb=vbmeta_system_dlkm
# ZRAM, SD-Card and virtiofs shares
/dev/block/zram0 none swap defaults zramsize=75%
/dev/block/vdc1 /sdcard vfat defaults recoveryonly