diff options
Diffstat (limited to 'fs_mgr/tests/fs_mgr_test.cpp')
-rw-r--r-- | fs_mgr/tests/fs_mgr_test.cpp | 176 |
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++; -} |