summaryrefslogtreecommitdiff
path: root/fs_mgr/tests/fs_mgr_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fs_mgr/tests/fs_mgr_test.cpp')
-rw-r--r--fs_mgr/tests/fs_mgr_test.cpp176
1 files changed, 80 insertions, 96 deletions
diff --git a/fs_mgr/tests/fs_mgr_test.cpp b/fs_mgr/tests/fs_mgr_test.cpp
index 6c881c0bf..953574b66 100644
--- a/fs_mgr/tests/fs_mgr_test.cpp
+++ b/fs_mgr/tests/fs_mgr_test.cpp
@@ -120,7 +120,7 @@ const std::vector<std::pair<std::string, std::string>> result_space = {
};
const std::string bootconfig =
- "androidboot.bootdevice = \"1d84000.ufshc\"\n"
+ "androidboot.bootdevice = \" \"1d84000.ufshc\"\n"
"androidboot.boot_devices = \"dev1\", \"dev2,withcomma\", \"dev3\"\n"
"androidboot.baseband = \"sdy\"\n"
"androidboot.keymaster = \"1\"\n"
@@ -192,13 +192,17 @@ bool CompareFlags(FstabEntry::FsMgrFlags& lhs, FstabEntry::FsMgrFlags& rhs) {
lhs.nonremovable == rhs.nonremovable &&
lhs.vold_managed == rhs.vold_managed &&
lhs.recovery_only == rhs.recovery_only &&
+ lhs.verify == rhs.verify &&
+ lhs.force_crypt == rhs.force_crypt &&
lhs.no_emulated_sd == rhs.no_emulated_sd &&
lhs.no_trim == rhs.no_trim &&
lhs.file_encryption == rhs.file_encryption &&
lhs.formattable == rhs.formattable &&
lhs.slot_select == rhs.slot_select &&
+ lhs.force_fde_or_fbe == rhs.force_fde_or_fbe &&
lhs.late_mount == rhs.late_mount &&
lhs.no_fail == rhs.no_fail &&
+ lhs.verify_at_boot == rhs.verify_at_boot &&
lhs.quota == rhs.quota &&
lhs.avb == rhs.avb &&
lhs.logical == rhs.logical &&
@@ -407,7 +411,7 @@ TEST(fs_mgr, ReadFstabFromFile_FsMgrFlags) {
TemporaryFile tf;
ASSERT_TRUE(tf.fd != -1);
std::string fstab_contents = R"fs(
-source none0 swap defaults wait,check,nonremovable,recoveryonly
+source none0 swap defaults wait,check,nonremovable,recoveryonly,verifyatboot,verify
source none1 swap defaults avb,noemulatedsd,notrim,formattable,nofail
source none2 swap defaults first_stage_mount,latemount,quota,logical
source none3 swap defaults checkpoint=block
@@ -428,6 +432,8 @@ source none5 swap defaults defaults
flags.check = true;
flags.nonremovable = true;
flags.recovery_only = true;
+ flags.verify_at_boot = true;
+ flags.verify = true;
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
}
@@ -482,16 +488,18 @@ TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_AllBad) {
TemporaryFile tf;
ASSERT_TRUE(tf.fd != -1);
std::string fstab_contents = R"fs(
-source none0 swap defaults fileencryption,keydirectory,length,swapprio,zramsize,max_comp_streams,reservedsize,eraseblk,logicalblk,sysfs_path,zram_backingdev_size
+source none0 swap defaults encryptable,forceencrypt,fileencryption,forcefdeorfbe,keydirectory,length,swapprio,zramsize,max_comp_streams,reservedsize,eraseblk,logicalblk,sysfs_path,zram_backingdev_size
-source none1 swap defaults fileencryption=,keydirectory=,length=,swapprio=,zramsize=,max_comp_streams=,avb=,reservedsize=,eraseblk=,logicalblk=,sysfs_path=,zram_backingdev_size=
+source none1 swap defaults encryptable=,forceencrypt=,fileencryption=,keydirectory=,length=,swapprio=,zramsize=,max_comp_streams=,avb=,reservedsize=,eraseblk=,logicalblk=,sysfs_path=,zram_backingdev_size=
+
+source none2 swap defaults forcefdeorfbe=
)fs";
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
Fstab fstab;
EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
- ASSERT_LE(2U, fstab.size());
+ ASSERT_LE(3U, fstab.size());
auto entry = fstab.begin();
EXPECT_EQ("none0", entry->mount_point);
@@ -499,6 +507,7 @@ source none1 swap defaults fileencryption=,keydirectory=,length=,sw
FstabEntry::FsMgrFlags flags = {};
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
}
+ EXPECT_EQ("", entry->key_loc);
EXPECT_EQ("", entry->metadata_key_dir);
EXPECT_EQ(0, entry->length);
EXPECT_EQ("", entry->label);
@@ -517,10 +526,13 @@ source none1 swap defaults fileencryption=,keydirectory=,length=,sw
EXPECT_EQ("none1", entry->mount_point);
{
FstabEntry::FsMgrFlags flags = {};
+ flags.crypt = true;
+ flags.force_crypt = true;
flags.file_encryption = true;
flags.avb = true;
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
}
+ EXPECT_EQ("", entry->key_loc);
EXPECT_EQ("", entry->metadata_key_dir);
EXPECT_EQ(0, entry->length);
EXPECT_EQ("", entry->label);
@@ -534,26 +546,24 @@ source none1 swap defaults fileencryption=,keydirectory=,length=,sw
EXPECT_EQ(0, entry->logical_blk_size);
EXPECT_EQ("", entry->sysfs_path);
EXPECT_EQ(0U, entry->zram_backingdev_size);
-}
-
-// FDE is no longer supported, so an fstab with FDE enabled should be rejected.
-TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_FDE) {
- TemporaryFile tf;
- ASSERT_TRUE(tf.fd != -1);
- std::string fstab_contents = R"fs(
-source /data ext4 noatime forceencrypt=footer
-)fs";
- ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
+ entry++;
- Fstab fstab;
- EXPECT_FALSE(ReadFstabFromFile(tf.path, &fstab));
+ // forcefdeorfbe has its own encryption_options defaults, so test it separately.
+ EXPECT_EQ("none2", entry->mount_point);
+ {
+ FstabEntry::FsMgrFlags flags = {};
+ flags.force_fde_or_fbe = true;
+ EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
+ }
+ EXPECT_EQ("aes-256-xts:aes-256-cts", entry->encryption_options);
+ EXPECT_EQ("", entry->key_loc);
}
-TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_AdoptableStorage) {
+TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Encryptable) {
TemporaryFile tf;
ASSERT_TRUE(tf.fd != -1);
std::string fstab_contents = R"fs(
-source none0 swap defaults encryptable=userdata,voldmanaged=sdcard:auto
+source none0 swap defaults encryptable=/dir/key
)fs";
ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
@@ -563,11 +573,11 @@ source none0 swap defaults encryptable=userdata,voldmanaged=sdcard:
FstabEntry::FsMgrFlags flags = {};
flags.crypt = true;
- flags.vold_managed = true;
auto entry = fstab.begin();
EXPECT_EQ("none0", entry->mount_point);
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
+ EXPECT_EQ("/dir/key", entry->key_loc);
}
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_VoldManaged) {
@@ -715,6 +725,53 @@ source none5 swap defaults zramsize=%
EXPECT_EQ(0, entry->zram_size);
}
+TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_ForceEncrypt) {
+ TemporaryFile tf;
+ ASSERT_TRUE(tf.fd != -1);
+ std::string fstab_contents = R"fs(
+source none0 swap defaults forceencrypt=/dir/key
+)fs";
+
+ ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
+
+ Fstab fstab;
+ EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
+ ASSERT_LE(1U, fstab.size());
+
+ auto entry = fstab.begin();
+ EXPECT_EQ("none0", entry->mount_point);
+
+ FstabEntry::FsMgrFlags flags = {};
+ flags.force_crypt = true;
+ EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
+
+ EXPECT_EQ("/dir/key", entry->key_loc);
+}
+
+TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_ForceFdeOrFbe) {
+ TemporaryFile tf;
+ ASSERT_TRUE(tf.fd != -1);
+ std::string fstab_contents = R"fs(
+source none0 swap defaults forcefdeorfbe=/dir/key
+)fs";
+
+ ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
+
+ Fstab fstab;
+ EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
+ ASSERT_LE(1U, fstab.size());
+
+ auto entry = fstab.begin();
+ EXPECT_EQ("none0", entry->mount_point);
+
+ FstabEntry::FsMgrFlags flags = {};
+ flags.force_fde_or_fbe = true;
+ EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
+
+ EXPECT_EQ("/dir/key", entry->key_loc);
+ EXPECT_EQ("aes-256-xts:aes-256-cts", entry->encryption_options);
+}
+
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_FileEncryption) {
TemporaryFile tf;
ASSERT_TRUE(tf.fd != -1);
@@ -943,7 +1000,7 @@ source none0 swap defaults keydirectory=/dir/key,metadata_encryptio
ASSERT_LE(1U, fstab.size());
auto entry = fstab.begin();
- EXPECT_EQ("adiantum", entry->metadata_encryption_options);
+ EXPECT_EQ("adiantum", entry->metadata_encryption);
}
TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_MetadataEncryption_WrappedKey) {
@@ -960,8 +1017,8 @@ source none0 swap defaults keydirectory=/dir/key,metadata_encryptio
ASSERT_LE(1U, fstab.size());
auto entry = fstab.begin();
- EXPECT_EQ("aes-256-xts:wrappedkey_v0", entry->metadata_encryption_options);
- auto parts = android::base::Split(entry->metadata_encryption_options, ":");
+ EXPECT_EQ("aes-256-xts:wrappedkey_v0", entry->metadata_encryption);
+ auto parts = android::base::Split(entry->metadata_encryption, ":");
EXPECT_EQ(2U, parts.size());
EXPECT_EQ("aes-256-xts", parts[0]);
EXPECT_EQ("wrappedkey_v0", parts[1]);
@@ -1104,76 +1161,3 @@ source none6 swap defaults readahead_size_kb=0
EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags));
EXPECT_EQ(0, entry->readahead_size_kb);
}
-
-TEST(fs_mgr, TransformFstabForDsu) {
- TemporaryFile tf;
- ASSERT_TRUE(tf.fd != -1);
- std::string fstab_contents = R"fs(
-system /system erofs ro wait,logical,first_stage_mount
-system /system ext4 ro wait,logical,first_stage_mount
-vendor /vendor ext4 ro wait,logical,first_stage_mount
-data /data f2fs noatime wait
-)fs";
-
- ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
-
- Fstab fstab;
- EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
- TransformFstabForDsu(&fstab, "dsu", {"system_gsi", "userdata_gsi"});
- ASSERT_EQ(4U, fstab.size());
-
- auto entry = fstab.begin();
-
- EXPECT_EQ("/system", entry->mount_point);
- EXPECT_EQ("system_gsi", entry->blk_device);
- entry++;
-
- EXPECT_EQ("/system", entry->mount_point);
- EXPECT_EQ("system_gsi", entry->blk_device);
- entry++;
-
- EXPECT_EQ("/vendor", entry->mount_point);
- EXPECT_EQ("vendor", entry->blk_device);
- entry++;
-
- EXPECT_EQ("/data", entry->mount_point);
- EXPECT_EQ("userdata_gsi", entry->blk_device);
- entry++;
-}
-
-TEST(fs_mgr, TransformFstabForDsu_synthesisExt4Entry) {
- TemporaryFile tf;
- ASSERT_TRUE(tf.fd != -1);
- std::string fstab_contents = R"fs(
-system /system erofs ro wait,logical,first_stage_mount
-vendor /vendor ext4 ro wait,logical,first_stage_mount
-data /data f2fs noatime wait
-)fs";
-
- ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path));
-
- Fstab fstab;
- EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab));
- TransformFstabForDsu(&fstab, "dsu", {"system_gsi", "userdata_gsi"});
- ASSERT_EQ(4U, fstab.size());
-
- auto entry = fstab.begin();
-
- EXPECT_EQ("/system", entry->mount_point);
- EXPECT_EQ("system_gsi", entry->blk_device);
- EXPECT_EQ("erofs", entry->fs_type);
- entry++;
-
- EXPECT_EQ("/system", entry->mount_point);
- EXPECT_EQ("system_gsi", entry->blk_device);
- EXPECT_EQ("ext4", entry->fs_type);
- entry++;
-
- EXPECT_EQ("/vendor", entry->mount_point);
- EXPECT_EQ("vendor", entry->blk_device);
- entry++;
-
- EXPECT_EQ("/data", entry->mount_point);
- EXPECT_EQ("userdata_gsi", entry->blk_device);
- entry++;
-}