|
|
|
@ -71,6 +71,7 @@ extern "C" {
|
|
|
|
|
using android::base::ParseUint;
|
|
|
|
|
using android::base::StringPrintf;
|
|
|
|
|
using android::fs_mgr::GetEntryForMountPoint;
|
|
|
|
|
using android::vold::KeyBuffer;
|
|
|
|
|
using namespace android::dm;
|
|
|
|
|
using namespace std::chrono_literals;
|
|
|
|
|
|
|
|
|
@ -1910,8 +1911,13 @@ errout:
|
|
|
|
|
* as any metadata is been stored in a separate, small partition. We
|
|
|
|
|
* assume it must be using our same crypt type and keysize.
|
|
|
|
|
*/
|
|
|
|
|
int cryptfs_setup_ext_volume(const char* label, const char* real_blkdev, const unsigned char* key,
|
|
|
|
|
int cryptfs_setup_ext_volume(const char* label, const char* real_blkdev, const KeyBuffer& key,
|
|
|
|
|
std::string* out_crypto_blkdev) {
|
|
|
|
|
if (key.size() != cryptfs_get_keysize()) {
|
|
|
|
|
SLOGE("Raw keysize %zu does not match crypt keysize %" PRIu32, key.size(),
|
|
|
|
|
cryptfs_get_keysize());
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
uint64_t nr_sec = 0;
|
|
|
|
|
if (android::vold::GetBlockDev512Sectors(real_blkdev, &nr_sec) != android::OK) {
|
|
|
|
|
SLOGE("Failed to get size of %s: %s", real_blkdev, strerror(errno));
|
|
|
|
@ -1929,7 +1935,8 @@ int cryptfs_setup_ext_volume(const char* label, const char* real_blkdev, const u
|
|
|
|
|
android::base::GetBoolProperty("ro.crypto.allow_encrypt_override", false))
|
|
|
|
|
flags |= CREATE_CRYPTO_BLK_DEV_FLAGS_ALLOW_ENCRYPT_OVERRIDE;
|
|
|
|
|
|
|
|
|
|
return create_crypto_blk_dev(&ext_crypt_ftr, key, real_blkdev, out_crypto_blkdev, label, flags);
|
|
|
|
|
return create_crypto_blk_dev(&ext_crypt_ftr, reinterpret_cast<const unsigned char*>(key.data()),
|
|
|
|
|
real_blkdev, out_crypto_blkdev, label, flags);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|