Loading fs_mgr/fs_mgr_overlayfs.cpp +19 −8 Original line number Original line Diff line number Diff line Loading @@ -219,6 +219,15 @@ bool fs_mgr_overlayfs_already_mounted(const std::string& mount_point) { return false; return false; } } bool fs_mgr_overlayfs_verity_enabled(const std::string& basename_mount_point) { auto found = false; fs_mgr_update_verity_state( [&basename_mount_point, &found](fstab_rec*, const char* mount_point, int, int) { if (mount_point && (basename_mount_point == mount_point)) found = true; }); return found; } bool fs_mgr_wants_overlayfs(const fstab_rec* fsrec) { bool fs_mgr_wants_overlayfs(const fstab_rec* fsrec) { if (!fsrec) return false; if (!fsrec) return false; Loading @@ -242,14 +251,7 @@ bool fs_mgr_wants_overlayfs(const fstab_rec* fsrec) { if (!fs_mgr_overlayfs_enabled(fsrec)) return false; if (!fs_mgr_overlayfs_enabled(fsrec)) return false; // Verity enabled? return !fs_mgr_overlayfs_verity_enabled(android::base::Basename(fsrec_mount_point)); const auto basename_mount_point(android::base::Basename(fsrec_mount_point)); auto found = false; fs_mgr_update_verity_state( [&basename_mount_point, &found](fstab_rec*, const char* mount_point, int, int) { if (mount_point && (basename_mount_point == mount_point)) found = true; }); return !found; } } bool fs_mgr_rm_all(const std::string& path, bool* change = nullptr) { bool fs_mgr_rm_all(const std::string& path, bool* change = nullptr) { Loading Loading @@ -395,6 +397,15 @@ std::vector<std::string> fs_mgr_candidate_list(const fstab* fstab, } } if (!duplicate_or_more_specific) mounts.emplace_back(new_mount_point); if (!duplicate_or_more_specific) mounts.emplace_back(new_mount_point); } } // if not itemized /system or /, system as root, fake up // fs_mgr_wants_overlayfs evaluation of /system as candidate. if ((std::find(mounts.begin(), mounts.end(), "/system") == mounts.end()) && !fs_mgr_get_entry_for_mount_point(const_cast<struct fstab*>(fstab), "/") && !fs_mgr_get_entry_for_mount_point(const_cast<struct fstab*>(fstab), "/system") && !fs_mgr_overlayfs_verity_enabled("system")) { mounts.emplace_back("/system"); } return mounts; return mounts; } } Loading Loading
fs_mgr/fs_mgr_overlayfs.cpp +19 −8 Original line number Original line Diff line number Diff line Loading @@ -219,6 +219,15 @@ bool fs_mgr_overlayfs_already_mounted(const std::string& mount_point) { return false; return false; } } bool fs_mgr_overlayfs_verity_enabled(const std::string& basename_mount_point) { auto found = false; fs_mgr_update_verity_state( [&basename_mount_point, &found](fstab_rec*, const char* mount_point, int, int) { if (mount_point && (basename_mount_point == mount_point)) found = true; }); return found; } bool fs_mgr_wants_overlayfs(const fstab_rec* fsrec) { bool fs_mgr_wants_overlayfs(const fstab_rec* fsrec) { if (!fsrec) return false; if (!fsrec) return false; Loading @@ -242,14 +251,7 @@ bool fs_mgr_wants_overlayfs(const fstab_rec* fsrec) { if (!fs_mgr_overlayfs_enabled(fsrec)) return false; if (!fs_mgr_overlayfs_enabled(fsrec)) return false; // Verity enabled? return !fs_mgr_overlayfs_verity_enabled(android::base::Basename(fsrec_mount_point)); const auto basename_mount_point(android::base::Basename(fsrec_mount_point)); auto found = false; fs_mgr_update_verity_state( [&basename_mount_point, &found](fstab_rec*, const char* mount_point, int, int) { if (mount_point && (basename_mount_point == mount_point)) found = true; }); return !found; } } bool fs_mgr_rm_all(const std::string& path, bool* change = nullptr) { bool fs_mgr_rm_all(const std::string& path, bool* change = nullptr) { Loading Loading @@ -395,6 +397,15 @@ std::vector<std::string> fs_mgr_candidate_list(const fstab* fstab, } } if (!duplicate_or_more_specific) mounts.emplace_back(new_mount_point); if (!duplicate_or_more_specific) mounts.emplace_back(new_mount_point); } } // if not itemized /system or /, system as root, fake up // fs_mgr_wants_overlayfs evaluation of /system as candidate. if ((std::find(mounts.begin(), mounts.end(), "/system") == mounts.end()) && !fs_mgr_get_entry_for_mount_point(const_cast<struct fstab*>(fstab), "/") && !fs_mgr_get_entry_for_mount_point(const_cast<struct fstab*>(fstab), "/system") && !fs_mgr_overlayfs_verity_enabled("system")) { mounts.emplace_back("/system"); } return mounts; return mounts; } } Loading