summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2022-05-11 21:24:28 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-05-11 21:24:28 +0000
commite358ce1a50875a8970e8ceb195f6d7c769f07a68 (patch)
tree00b3cd36e156830cf8a23333a4982641aff7eaff
parent10027c5c0370208538774e87781ff8c27b6b4c2a (diff)
parent449ac4d8ffec3feceeb7c99ebb49c322ca2a9b40 (diff)
downloadvold-e358ce1a50875a8970e8ceb195f6d7c769f07a68.tar.gz
Enforce that internal storage is prepared first am: c193c3fbb8 am: 449ac4d8ff
Original change: https://googleplex-android-review.googlesource.com/c/platform/system/vold/+/18163020 Change-Id: I230fdf8a3a4e38dcaf303c41867fdf924a3eae03 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--FsCrypt.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/FsCrypt.cpp b/FsCrypt.cpp
index 42df78b1..6c081778 100644
--- a/FsCrypt.cpp
+++ b/FsCrypt.cpp
@@ -812,6 +812,23 @@ bool fscrypt_prepare_user_storage(const std::string& volume_uuid, userid_t user_
LOG(DEBUG) << "fscrypt_prepare_user_storage for volume " << escape_empty(volume_uuid)
<< ", user " << user_id << ", serial " << serial << ", flags " << flags;
+ // Internal storage must be prepared before adoptable storage, since the
+ // user's volume keys are stored in their internal storage.
+ if (!volume_uuid.empty()) {
+ if ((flags & android::os::IVold::STORAGE_FLAG_DE) &&
+ !android::vold::pathExists(android::vold::BuildDataMiscDePath("", user_id))) {
+ LOG(ERROR) << "Cannot prepare DE storage for user " << user_id << " on volume "
+ << volume_uuid << " before internal storage";
+ return false;
+ }
+ if ((flags & android::os::IVold::STORAGE_FLAG_CE) &&
+ !android::vold::pathExists(android::vold::BuildDataMiscCePath("", user_id))) {
+ LOG(ERROR) << "Cannot prepare CE storage for user " << user_id << " on volume "
+ << volume_uuid << " before internal storage";
+ return false;
+ }
+ }
+
if (flags & android::os::IVold::STORAGE_FLAG_DE) {
// DE_sys key
auto system_legacy_path = android::vold::BuildDataSystemLegacyPath(user_id);