diff options
-rw-r--r-- | cryptfs.cpp | 8 | ||||
-rw-r--r-- | cryptfs.h | 1 | ||||
-rw-r--r-- | model/PrivateVolume.cpp | 13 |
3 files changed, 10 insertions, 12 deletions
diff --git a/cryptfs.cpp b/cryptfs.cpp index 1596460d..def306da 100644 --- a/cryptfs.cpp +++ b/cryptfs.cpp @@ -1955,14 +1955,6 @@ int cryptfs_setup_ext_volume(const char* label, const char* real_blkdev, const K real_blkdev, out_crypto_blkdev, label, flags); } -/* - * Called by vold when it's asked to unmount an encrypted external - * storage volume. - */ -int cryptfs_revert_ext_volume(const char* label) { - return delete_crypto_blk_dev(label); -} - int cryptfs_crypto_complete(void) { return do_crypto_complete("/data"); } @@ -66,7 +66,6 @@ int cryptfs_changepw(int type, const char* newpw); int cryptfs_enable_default(int no_ui); int cryptfs_setup_ext_volume(const char* label, const char* real_blkdev, const android::vold::KeyBuffer& key, std::string* out_crypto_blkdev); -int cryptfs_revert_ext_volume(const char* label); int cryptfs_getfield(const char* fieldname, char* value, int len); int cryptfs_setfield(const char* fieldname, const char* value); int cryptfs_mount_default_encrypted(void); diff --git a/model/PrivateVolume.cpp b/model/PrivateVolume.cpp index 650888e4..9f1f089e 100644 --- a/model/PrivateVolume.cpp +++ b/model/PrivateVolume.cpp @@ -25,6 +25,7 @@ #include <android-base/logging.h> #include <android-base/stringprintf.h> #include <cutils/fs.h> +#include <libdm/dm.h> #include <private/android_filesystem_config.h> #include <fcntl.h> @@ -66,7 +67,11 @@ status_t PrivateVolume::doCreate() { } // Recover from stale vold by tearing down any old mappings - cryptfs_revert_ext_volume(getId().c_str()); + auto& dm = dm::DeviceMapper::Instance(); + if (!dm.DeleteDeviceIfExists(getId())) { + PLOG(ERROR) << "Cannot remove dm device " << getId(); + return -EIO; + } // TODO: figure out better SELinux labels for private volumes @@ -80,8 +85,10 @@ status_t PrivateVolume::doCreate() { } status_t PrivateVolume::doDestroy() { - if (cryptfs_revert_ext_volume(getId().c_str())) { - LOG(ERROR) << getId() << " failed to revert cryptfs"; + auto& dm = dm::DeviceMapper::Instance(); + if (!dm.DeleteDevice(getId())) { + PLOG(ERROR) << "Cannot remove dm device " << getId(); + return -EIO; } return DestroyDeviceNode(mRawDevPath); } |