summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2020-11-03 14:11:00 -0800
committerEric Biggers <ebiggers@google.com>2020-11-03 14:11:00 -0800
commit88f993b4a85d5a8638f9c2fd369b5ce6a078c847 (patch)
treef953b2a64ef120d4b2860591f0cb25de1218cc84
parentc01995ea3bfe357e8e85d3fe946014f675a0683f (diff)
downloadvold-88f993b4a85d5a8638f9c2fd369b5ce6a078c847.tar.gz
Check return value of create_crypto_blk_dev()
cryptfs_enable_internal() forgot to check the return value of create_crypto_blk_dev(), so it was continuing to cryptfs_enable_inplace() when creating the dm-crypt device failed, which doesn't make sense. Test: see I08fc8465f7962abd698904b5466f3ed080d53953 Change-Id: If9f20069d0f084150aa887a350f7c0c31a6d80f2
-rw-r--r--cryptfs.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/cryptfs.cpp b/cryptfs.cpp
index 316c7630..36bd43b3 100644
--- a/cryptfs.cpp
+++ b/cryptfs.cpp
@@ -2287,13 +2287,14 @@ int cryptfs_enable_internal(int crypt_type, const char* passwd, int no_ui) {
}
decrypt_master_key(passwd, decrypted_master_key, &crypt_ftr, 0, 0);
- create_crypto_blk_dev(&crypt_ftr, decrypted_master_key, real_blkdev.c_str(), &crypto_blkdev,
- CRYPTO_BLOCK_DEVICE, 0);
-
- rc = cryptfs_enable_all_volumes(&crypt_ftr, crypto_blkdev.c_str(), real_blkdev.data());
+ rc = create_crypto_blk_dev(&crypt_ftr, decrypted_master_key, real_blkdev.c_str(),
+ &crypto_blkdev, CRYPTO_BLOCK_DEVICE, 0);
+ if (!rc) {
+ rc = cryptfs_enable_all_volumes(&crypt_ftr, crypto_blkdev.c_str(), real_blkdev.data());
- /* Undo the dm-crypt mapping whether we succeed or not */
- delete_crypto_blk_dev(CRYPTO_BLOCK_DEVICE);
+ /* Undo the dm-crypt mapping whether we succeed or not */
+ delete_crypto_blk_dev(CRYPTO_BLOCK_DEVICE);
+ }
if (!rc) {
/* Success */