diff options
author | David Anderson <dvander@google.com> | 2019-02-14 20:27:05 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-02-14 20:27:05 +0000 |
commit | cb13a7766e8eb8393a6ffc6813e7d7686fc9bd4a (patch) | |
tree | 71b6694f59c3ea950f050b82f6e69587c19862b7 /fs_mgr/fs_mgr_fstab.cpp | |
parent | fa130f3ad4d6004d13634fc1f285bde85fb73c3a (diff) | |
parent | 88045aef5999ab813f0ee22ca67429873954634d (diff) | |
download | system_core-cb13a7766e8eb8393a6ffc6813e7d7686fc9bd4a.tar.gz system_core-cb13a7766e8eb8393a6ffc6813e7d7686fc9bd4a.tar.bz2 system_core-cb13a7766e8eb8393a6ffc6813e7d7686fc9bd4a.zip |
Merge "Enable metadata encryption for userdata_gsi."
Diffstat (limited to 'fs_mgr/fs_mgr_fstab.cpp')
-rw-r--r-- | fs_mgr/fs_mgr_fstab.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/fs_mgr/fs_mgr_fstab.cpp b/fs_mgr/fs_mgr_fstab.cpp index 4d44fcf21..4659add6f 100644 --- a/fs_mgr/fs_mgr_fstab.cpp +++ b/fs_mgr/fs_mgr_fstab.cpp @@ -588,18 +588,7 @@ std::set<std::string> ExtraBootDevices(const Fstab& fstab) { return boot_devices; } -void EraseFstabEntry(Fstab* fstab, const std::string& mount_point) { - auto iter = std::remove_if(fstab->begin(), fstab->end(), - [&](const auto& entry) { return entry.mount_point == mount_point; }); - fstab->erase(iter, fstab->end()); -} - -void TransformFstabForGsi(Fstab* fstab) { - EraseFstabEntry(fstab, "/system"); - EraseFstabEntry(fstab, "/data"); - - fstab->emplace_back(BuildGsiSystemFstabEntry()); - +FstabEntry BuildGsiUserdataFstabEntry() { constexpr uint32_t kFlags = MS_NOATIME | MS_NOSUID | MS_NODEV; FstabEntry userdata = { @@ -615,6 +604,34 @@ void TransformFstabForGsi(Fstab* fstab) { userdata.fs_mgr_flags.quota = true; userdata.fs_mgr_flags.late_mount = true; userdata.fs_mgr_flags.formattable = true; + return userdata; +} + +void EraseFstabEntry(Fstab* fstab, const std::string& mount_point) { + auto iter = std::remove_if(fstab->begin(), fstab->end(), + [&](const auto& entry) { return entry.mount_point == mount_point; }); + fstab->erase(iter, fstab->end()); +} + +void TransformFstabForGsi(Fstab* fstab) { + // Inherit fstab properties for userdata. + FstabEntry userdata; + if (FstabEntry* entry = GetEntryForMountPoint(fstab, "/data")) { + userdata = *entry; + userdata.blk_device = "userdata_gsi"; + userdata.fs_mgr_flags.logical = true; + userdata.fs_mgr_flags.formattable = true; + if (!userdata.key_dir.empty()) { + userdata.key_dir += "/gsi"; + } + } else { + userdata = BuildGsiUserdataFstabEntry(); + } + + EraseFstabEntry(fstab, "/system"); + EraseFstabEntry(fstab, "/data"); + + fstab->emplace_back(BuildGsiSystemFstabEntry()); fstab->emplace_back(userdata); } |