Loading fs_mgr/Android.bp +5 −1 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ cc_library { "libfs_avb", "libfstab", "libdm", "libgsi", ], export_static_lib_headers: [ "libfs_avb", Loading Loading @@ -105,5 +106,8 @@ cc_library_static { }, }, export_include_dirs: ["include_fstab"], header_libs: ["libbase_headers"], header_libs: [ "libbase_headers", "libgsi_headers", ], } fs_mgr/fs_mgr_fstab.cpp +50 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <android-base/file.h> #include <android-base/stringprintf.h> #include <android-base/strings.h> #include <libgsi/libgsi.h> #include "fs_mgr_priv.h" Loading Loading @@ -638,6 +639,35 @@ static std::set<std::string> extract_boot_devices(const Fstab& fstab) { return boot_devices; } static 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()); } static void TransformFstabForGsi(Fstab* fstab) { EraseFstabEntry(fstab, "/system"); EraseFstabEntry(fstab, "/data"); fstab->emplace_back(BuildGsiSystemFstabEntry()); constexpr uint32_t kFlags = MS_NOATIME | MS_NOSUID | MS_NODEV; FstabEntry userdata = { .blk_device = "userdata_gsi", .mount_point = "/data", .fs_type = "ext4", .flags = kFlags, .reserved_size = 128 * 1024 * 1024, }; userdata.fs_mgr_flags.wait = true; userdata.fs_mgr_flags.check = true; userdata.fs_mgr_flags.logical = true; userdata.fs_mgr_flags.quota = true; userdata.fs_mgr_flags.late_mount = true; fstab->emplace_back(userdata); } bool ReadFstabFromFile(const std::string& path, Fstab* fstab) { auto fstab_file = std::unique_ptr<FILE, decltype(&fclose)>{fopen(path.c_str(), "re"), fclose}; if (!fstab_file) { Loading @@ -645,10 +675,15 @@ bool ReadFstabFromFile(const std::string& path, Fstab* fstab) { return false; } if (!fs_mgr_read_fstab_file(fstab_file.get(), path == "/proc/mounts", fstab)) { bool is_proc_mounts = path == "/proc/mounts"; if (!fs_mgr_read_fstab_file(fstab_file.get(), is_proc_mounts, fstab)) { LERROR << __FUNCTION__ << "(): failed to load fstab from : '" << path << "'"; return false; } if (!is_proc_mounts && !access(android::gsi::kGsiBootedIndicatorFile, F_OK)) { TransformFstabForGsi(fstab); } return true; } Loading Loading @@ -1023,3 +1058,17 @@ int fs_mgr_is_checkpoint_fs(const struct fstab_rec* fstab) { int fs_mgr_is_checkpoint_blk(const struct fstab_rec* fstab) { return fstab->fs_mgr_flags & MF_CHECKPOINT_BLK; } FstabEntry BuildGsiSystemFstabEntry() { FstabEntry system = { .blk_device = "system_gsi", .mount_point = "/system", .fs_type = "ext4", .flags = MS_RDONLY, .fs_options = "barrier=1", }; system.fs_mgr_flags.wait = true; system.fs_mgr_flags.logical = true; system.fs_mgr_flags.first_stage_mount = true; return system; } fs_mgr/fs_mgr_overlayfs.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ #include <fs_mgr_overlayfs.h> #include <fstab/fstab.h> #include <libdm/dm.h> #include <libgsi/libgsi.h> #include <liblp/builder.h> #include <liblp/liblp.h> Loading Loading @@ -802,8 +803,9 @@ bool fs_mgr_overlayfs_scratch_can_be_mounted(const std::string& scratch_device) bool fs_mgr_overlayfs_invalid() { if (fs_mgr_overlayfs_valid() == OverlayfsValidResult::kNotSupported) return true; // in recovery or fastbootd mode, not allowed! // in recovery, fastbootd, or gsi mode, not allowed! if (fs_mgr_access("/system/bin/recovery")) return true; if (android::gsi::IsGsiRunning()) return true; return false; } Loading fs_mgr/include_fstab/fstab/fstab.h +3 −0 Original line number Diff line number Diff line Loading @@ -187,3 +187,6 @@ bool ReadDefaultFstab(Fstab* fstab); FstabEntry FstabRecToFstabEntry(const fstab_rec* fstab_rec); Fstab LegacyFstabToFstab(const struct fstab* legacy_fstab); fstab* FstabToLegacyFstab(const Fstab& fstab); // Helper method to build a GSI fstab entry for mounting /system. FstabEntry BuildGsiSystemFstabEntry(); init/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ cc_defaults { "libext4_utils", "libfs_mgr", "libfscrypt", "libgsi", "libhidl-gen-utils", "libkeyutils", "liblog", Loading Loading
fs_mgr/Android.bp +5 −1 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ cc_library { "libfs_avb", "libfstab", "libdm", "libgsi", ], export_static_lib_headers: [ "libfs_avb", Loading Loading @@ -105,5 +106,8 @@ cc_library_static { }, }, export_include_dirs: ["include_fstab"], header_libs: ["libbase_headers"], header_libs: [ "libbase_headers", "libgsi_headers", ], }
fs_mgr/fs_mgr_fstab.cpp +50 −1 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <android-base/file.h> #include <android-base/stringprintf.h> #include <android-base/strings.h> #include <libgsi/libgsi.h> #include "fs_mgr_priv.h" Loading Loading @@ -638,6 +639,35 @@ static std::set<std::string> extract_boot_devices(const Fstab& fstab) { return boot_devices; } static 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()); } static void TransformFstabForGsi(Fstab* fstab) { EraseFstabEntry(fstab, "/system"); EraseFstabEntry(fstab, "/data"); fstab->emplace_back(BuildGsiSystemFstabEntry()); constexpr uint32_t kFlags = MS_NOATIME | MS_NOSUID | MS_NODEV; FstabEntry userdata = { .blk_device = "userdata_gsi", .mount_point = "/data", .fs_type = "ext4", .flags = kFlags, .reserved_size = 128 * 1024 * 1024, }; userdata.fs_mgr_flags.wait = true; userdata.fs_mgr_flags.check = true; userdata.fs_mgr_flags.logical = true; userdata.fs_mgr_flags.quota = true; userdata.fs_mgr_flags.late_mount = true; fstab->emplace_back(userdata); } bool ReadFstabFromFile(const std::string& path, Fstab* fstab) { auto fstab_file = std::unique_ptr<FILE, decltype(&fclose)>{fopen(path.c_str(), "re"), fclose}; if (!fstab_file) { Loading @@ -645,10 +675,15 @@ bool ReadFstabFromFile(const std::string& path, Fstab* fstab) { return false; } if (!fs_mgr_read_fstab_file(fstab_file.get(), path == "/proc/mounts", fstab)) { bool is_proc_mounts = path == "/proc/mounts"; if (!fs_mgr_read_fstab_file(fstab_file.get(), is_proc_mounts, fstab)) { LERROR << __FUNCTION__ << "(): failed to load fstab from : '" << path << "'"; return false; } if (!is_proc_mounts && !access(android::gsi::kGsiBootedIndicatorFile, F_OK)) { TransformFstabForGsi(fstab); } return true; } Loading Loading @@ -1023,3 +1058,17 @@ int fs_mgr_is_checkpoint_fs(const struct fstab_rec* fstab) { int fs_mgr_is_checkpoint_blk(const struct fstab_rec* fstab) { return fstab->fs_mgr_flags & MF_CHECKPOINT_BLK; } FstabEntry BuildGsiSystemFstabEntry() { FstabEntry system = { .blk_device = "system_gsi", .mount_point = "/system", .fs_type = "ext4", .flags = MS_RDONLY, .fs_options = "barrier=1", }; system.fs_mgr_flags.wait = true; system.fs_mgr_flags.logical = true; system.fs_mgr_flags.first_stage_mount = true; return system; }
fs_mgr/fs_mgr_overlayfs.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ #include <fs_mgr_overlayfs.h> #include <fstab/fstab.h> #include <libdm/dm.h> #include <libgsi/libgsi.h> #include <liblp/builder.h> #include <liblp/liblp.h> Loading Loading @@ -802,8 +803,9 @@ bool fs_mgr_overlayfs_scratch_can_be_mounted(const std::string& scratch_device) bool fs_mgr_overlayfs_invalid() { if (fs_mgr_overlayfs_valid() == OverlayfsValidResult::kNotSupported) return true; // in recovery or fastbootd mode, not allowed! // in recovery, fastbootd, or gsi mode, not allowed! if (fs_mgr_access("/system/bin/recovery")) return true; if (android::gsi::IsGsiRunning()) return true; return false; } Loading
fs_mgr/include_fstab/fstab/fstab.h +3 −0 Original line number Diff line number Diff line Loading @@ -187,3 +187,6 @@ bool ReadDefaultFstab(Fstab* fstab); FstabEntry FstabRecToFstabEntry(const fstab_rec* fstab_rec); Fstab LegacyFstabToFstab(const struct fstab* legacy_fstab); fstab* FstabToLegacyFstab(const Fstab& fstab); // Helper method to build a GSI fstab entry for mounting /system. FstabEntry BuildGsiSystemFstabEntry();
init/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ cc_defaults { "libext4_utils", "libfs_mgr", "libfscrypt", "libgsi", "libhidl-gen-utils", "libkeyutils", "liblog", Loading