From 543a9283592a99aa279e8df2516da31a7a04d6f1 Mon Sep 17 00:00:00 2001 From: bigbiff Date: Sat, 2 Oct 2021 09:50:58 -0400 Subject: [PATCH] default fstab: only read the fstab if it hasn't been read yet Change-Id: I0d8d5cdda4da5486f51a80772f9d581bf549138c --- crypto/fscrypt/FsCrypt.cpp | 24 +++++++++++++++--------- crypto/fscrypt/MetadataCrypt.cpp | 17 ++++++++++------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/crypto/fscrypt/FsCrypt.cpp b/crypto/fscrypt/FsCrypt.cpp index aa31fe1e..6284fa86 100755 --- a/crypto/fscrypt/FsCrypt.cpp +++ b/crypto/fscrypt/FsCrypt.cpp @@ -233,9 +233,11 @@ static bool IsEmmcStorage(const std::string& blk_device) { // Retrieve the options to use for encryption policies on the /data filesystem. static bool get_data_file_encryption_options(EncryptionOptions* options) { - if (!ReadDefaultFstab(&fstab_default)) { - PLOG(ERROR) << "Failed to open default fstab"; - return false; + if (fstab_default.empty()) { + if (!ReadDefaultFstab(&fstab_default)) { + PLOG(ERROR) << "Failed to open default fstab"; + return false; + } } auto entry = GetEntryForMountPoint(&fstab_default, DATA_MNT_POINT); if (entry == nullptr) { @@ -299,9 +301,11 @@ static bool get_volume_file_encryption_options(EncryptionOptions* options) { } bool is_metadata_wrapped_key_supported() { - if (!ReadDefaultFstab(&fstab_default)) { - PLOG(ERROR) << "Failed to open default fstab"; - return false; + if (fstab_default.empty()) { + if (!ReadDefaultFstab(&fstab_default)) { + PLOG(ERROR) << "Failed to open default fstab"; + return false; + } } return GetEntryForMountPoint(&fstab_default, METADATA_MNT_POINT)->fs_mgr_flags.wrapped_key; } @@ -491,9 +495,11 @@ bool fscrypt_initialize_systemwide_keys() { } bool fscrypt_init_user0() { - if (!ReadDefaultFstab(&fstab_default)) { - PLOG(ERROR) << "Failed to open default fstab"; - return -1; + if (fstab_default.empty()) { + if (!ReadDefaultFstab(&fstab_default)) { + PLOG(ERROR) << "Failed to open default fstab"; + return -1; + } } LOG(INFO) << "fscrypt_init_user0"; if (fscrypt_is_native()) { diff --git a/crypto/fscrypt/MetadataCrypt.cpp b/crypto/fscrypt/MetadataCrypt.cpp index b53ecd41..853e81eb 100755 --- a/crypto/fscrypt/MetadataCrypt.cpp +++ b/crypto/fscrypt/MetadataCrypt.cpp @@ -97,9 +97,11 @@ static bool mount_via_fs_mgr(const char* mount_point, const char* blk_device) { return false; } - if (!ReadDefaultFstab(&fstab_default)) { - PLOG(ERROR) << "Failed to open default fstab"; - return -1; + if (fstab_default.empty()) { + if (!ReadDefaultFstab(&fstab_default)) { + PLOG(ERROR) << "Failed to open default fstab"; + return -1; + } } auto mount_rc = fs_mgr_do_mount(&fstab_default, const_cast(mount_point), const_cast(blk_device), nullptr, @@ -284,9 +286,11 @@ bool fscrypt_mount_metadata_encrypted(const std::string& blk_device, const std:: LOG(ERROR) << "fscrypt_enable_crypto got unexpected starting state: " << encrypted_state; return false; } - if (!ReadDefaultFstab(&fstab_default)) { - PLOG(ERROR) << "Failed to open default fstab"; - return -1; + if (fstab_default.empty()) { + if (!ReadDefaultFstab(&fstab_default)) { + PLOG(ERROR) << "Failed to open default fstab"; + return -1; + } } auto data_rec = GetEntryForMountPoint(&fstab_default, mount_point); if (!data_rec) { @@ -323,7 +327,6 @@ bool fscrypt_mount_metadata_encrypted(const std::string& blk_device, const std:: LOG(ERROR) << "Unknown options_format_version: " << options_format_version; return false; } - auto gen = needs_encrypt ? makeGen(options) : neverGen(); KeyBuffer key; if (!read_key(data_rec->metadata_key_dir, gen, &key)) return false;