Call fscrypt_destroy_volume_keys() under mCryptLock
Everything in FsCrypt.cpp seems to run under VolumeManager::mCryptLock,
except for fscrypt_destroy_volume_keys() which uses mLock instead.
This was sort of okay because fscrypt_destroy_volume_keys() didn't
operate on any in-memory data structures. However, that is going to be
changed. Therefore, rework VoldNativeService::forgetPartition() to call
fscrypt_destroy_volume_keys() under mCryptLock.
Test: see I7f11a135d8550618cd96013f834cebd54be5ef84
Change-Id: Ia27a61faf2fdd546cdbddb2a3985c7c6696f6aa6
Merged-In: Ia27a61faf2fdd546cdbddb2a3985c7c6696f6aa6
(cherry picked from commit ce86e24d233a26b68ae3655ebc3f5730322d78a4)
diff --git a/VoldNativeService.cpp b/VoldNativeService.cpp
index bcca50a..d51652b 100644
--- a/VoldNativeService.cpp
+++ b/VoldNativeService.cpp
@@ -256,9 +256,19 @@
ENFORCE_SYSTEM_OR_ROOT;
CHECK_ARGUMENT_HEX(partGuid);
CHECK_ARGUMENT_HEX(fsUuid);
- ACQUIRE_LOCK;
+ bool success = true;
- return translate(VolumeManager::Instance()->forgetPartition(partGuid, fsUuid));
+ {
+ ACQUIRE_LOCK;
+ success &= VolumeManager::Instance()->forgetPartition(partGuid, fsUuid);
+ }
+
+ {
+ ACQUIRE_CRYPT_LOCK;
+ success &= fscrypt_destroy_volume_keys(fsUuid);
+ }
+
+ return translateBool(success);
}
binder::Status VoldNativeService::mount(