summaryrefslogtreecommitdiffstats
path: root/fs_mgr
diff options
context:
space:
mode:
authorDavid Anderson <dvander@google.com>2019-02-04 19:02:19 -0800
committerDavid Anderson <dvander@google.com>2019-02-08 15:44:00 -0800
commit88045aef5999ab813f0ee22ca67429873954634d (patch)
tree43edce5407bdf43ab8bd2fa3db9c7084d61cc18e /fs_mgr
parent5bccd33e0bd66b1e53e5ebebe07d3c8f8dbdf50b (diff)
downloadsystem_core-88045aef5999ab813f0ee22ca67429873954634d.tar.gz
system_core-88045aef5999ab813f0ee22ca67429873954634d.tar.bz2
system_core-88045aef5999ab813f0ee22ca67429873954634d.zip
Enable metadata encryption for userdata_gsi.
Rather than constructing a userdata fstab entry from scratch, this patch will modify the vendor fstab to preserve the desired encryption properties and filesystem type. Bug: 123906417 Test: manual test Change-Id: I338715fc62628169e8eafbf4a3125e4aadf0ff15
Diffstat (limited to 'fs_mgr')
-rw-r--r--fs_mgr/fs_mgr_fstab.cpp41
1 files changed, 29 insertions, 12 deletions
diff --git a/fs_mgr/fs_mgr_fstab.cpp b/fs_mgr/fs_mgr_fstab.cpp
index 9a8ad5692..6d86bed73 100644
--- a/fs_mgr/fs_mgr_fstab.cpp
+++ b/fs_mgr/fs_mgr_fstab.cpp
@@ -587,18 +587,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 = {
@@ -614,6 +603,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);
}