diff options
author | Mark Salyzyn <salyzyn@google.com> | 2019-06-05 08:53:38 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-06-05 08:53:38 -0700 |
commit | 1803972b6b081e522454de5ee72d58011f5c8e9f (patch) | |
tree | 7b067b6c874840471d3d59fd512db5abc77fe53e | |
parent | 857a861c182c86c0f1d61e813ba63b8b95e9bc12 (diff) | |
parent | 0dff785221afbd51b92d46ba276018d0c977bc17 (diff) | |
download | system_core-1803972b6b081e522454de5ee72d58011f5c8e9f.tar.gz system_core-1803972b6b081e522454de5ee72d58011f5c8e9f.tar.bz2 system_core-1803972b6b081e522454de5ee72d58011f5c8e9f.zip |
fs_mgr: overlayfs: pre-emptive filesystem setup
am: 0dff785221
Change-Id: I007e1703957ddc064f8055dd5e0c3f834bb5ba3f
-rw-r--r-- | fs_mgr/fs_mgr_overlayfs.cpp | 7 | ||||
-rw-r--r-- | fs_mgr/fs_mgr_remount.cpp | 9 | ||||
-rw-r--r-- | fs_mgr/include/fs_mgr_overlayfs.h | 2 |
3 files changed, 11 insertions, 7 deletions
diff --git a/fs_mgr/fs_mgr_overlayfs.cpp b/fs_mgr/fs_mgr_overlayfs.cpp index c252ab523..c13c3b11d 100644 --- a/fs_mgr/fs_mgr_overlayfs.cpp +++ b/fs_mgr/fs_mgr_overlayfs.cpp @@ -90,7 +90,7 @@ std::vector<std::string> fs_mgr_overlayfs_required_devices(Fstab*) { return {}; } -bool fs_mgr_overlayfs_setup(const char*, const char*, bool* change) { +bool fs_mgr_overlayfs_setup(const char*, const char*, bool* change, bool) { if (change) *change = false; return false; } @@ -873,7 +873,8 @@ std::vector<std::string> fs_mgr_overlayfs_required_devices(Fstab* fstab) { // Returns false if setup not permitted, errno set to last error. // If something is altered, set *change. -bool fs_mgr_overlayfs_setup(const char* backing, const char* mount_point, bool* change) { +bool fs_mgr_overlayfs_setup(const char* backing, const char* mount_point, bool* change, + bool force) { if (change) *change = false; auto ret = false; if (fs_mgr_overlayfs_valid() == OverlayfsValidResult::kNotSupported) return ret; @@ -897,7 +898,7 @@ bool fs_mgr_overlayfs_setup(const char* backing, const char* mount_point, bool* continue; } save_errno = errno; - auto verity_enabled = fs_mgr_is_verity_enabled(*it); + auto verity_enabled = !force && fs_mgr_is_verity_enabled(*it); if (errno == ENOENT || errno == ENXIO) errno = save_errno; if (verity_enabled) { it = candidates.erase(it); diff --git a/fs_mgr/fs_mgr_remount.cpp b/fs_mgr/fs_mgr_remount.cpp index fcacd2a43..967631b65 100644 --- a/fs_mgr/fs_mgr_remount.cpp +++ b/fs_mgr/fs_mgr_remount.cpp @@ -250,6 +250,7 @@ int main(int argc, char* argv[]) { // Check verity and optionally setup overlayfs backing. auto reboot_later = false; auto uses_overlayfs = fs_mgr_overlayfs_valid() != OverlayfsValidResult::kNotSupported; + auto just_disabled_verity = false; for (auto it = partitions.begin(); it != partitions.end();) { auto& entry = *it; auto& mount_point = entry.mount_point; @@ -262,7 +263,8 @@ int main(int argc, char* argv[]) { false); avb_ops_user_free(ops); if (ret) { - LOG(WARNING) << "Disable verity for " << mount_point; + LOG(WARNING) << "Disabling verity for " << mount_point; + just_disabled_verity = true; reboot_later = can_reboot; if (reboot_later) { // w/o overlayfs available, also check for dedupe @@ -275,7 +277,8 @@ int main(int argc, char* argv[]) { } else if (fs_mgr_set_blk_ro(entry.blk_device, false)) { fec::io fh(entry.blk_device.c_str(), O_RDWR); if (fh && fh.set_verity_status(false)) { - LOG(WARNING) << "Disable verity for " << mount_point; + LOG(WARNING) << "Disabling verity for " << mount_point; + just_disabled_verity = true; reboot_later = can_reboot; if (reboot_later && !uses_overlayfs) { ++it; @@ -292,7 +295,7 @@ int main(int argc, char* argv[]) { auto change = false; errno = 0; - if (fs_mgr_overlayfs_setup(nullptr, mount_point.c_str(), &change)) { + if (fs_mgr_overlayfs_setup(nullptr, mount_point.c_str(), &change, just_disabled_verity)) { if (change) { LOG(INFO) << "Using overlayfs for " << mount_point; } diff --git a/fs_mgr/include/fs_mgr_overlayfs.h b/fs_mgr/include/fs_mgr_overlayfs.h index 6aaf1f3c1..9a7381ffe 100644 --- a/fs_mgr/include/fs_mgr_overlayfs.h +++ b/fs_mgr/include/fs_mgr_overlayfs.h @@ -26,7 +26,7 @@ android::fs_mgr::Fstab fs_mgr_overlayfs_candidate_list(const android::fs_mgr::Fs bool fs_mgr_overlayfs_mount_all(android::fs_mgr::Fstab* fstab); std::vector<std::string> fs_mgr_overlayfs_required_devices(android::fs_mgr::Fstab* fstab); bool fs_mgr_overlayfs_setup(const char* backing = nullptr, const char* mount_point = nullptr, - bool* change = nullptr); + bool* change = nullptr, bool force = true); bool fs_mgr_overlayfs_teardown(const char* mount_point = nullptr, bool* change = nullptr); bool fs_mgr_overlayfs_is_setup(); bool fs_mgr_has_shared_blocks(const std::string& mount_point, const std::string& dev); |