Merge "Enforce that internal storage is prepared first" am: 1093934040

Original change: https://android-review.googlesource.com/c/platform/system/vold/+/2085659

Change-Id: I30eaba96a192c2ce32aa16c60ffe1ac39194d639
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Eric Biggers 2022-05-04 19:54:18 +00:00 committed by Automerger Merge Worker
commit 4f4e999ec0

View file

@ -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);