diff options
author | Maxim Levitsky <mlevitsk@redhat.com> | 2019-09-26 00:35:17 +0300 |
---|---|---|
committer | Daniel P. Berrangé <berrange@redhat.com> | 2019-09-26 16:34:02 +0100 |
commit | 70b2a1fed5d84c3a5f84432e4973568bff801d6c (patch) | |
tree | 8744b473355f90a3c08414d21a1522b198b6b45f /crypto/block-luks.c | |
parent | f0d3c3625c11443e87c19065859c0af645c2dec4 (diff) | |
download | qemu-70b2a1fed5d84c3a5f84432e4973568bff801d6c.zip qemu-70b2a1fed5d84c3a5f84432e4973568bff801d6c.tar.gz qemu-70b2a1fed5d84c3a5f84432e4973568bff801d6c.tar.bz2 |
qcrypto-luks: don't overwrite cipher_mode in header
This way we can store the header we loaded, which
will be used in key management code
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Diffstat (limited to 'crypto/block-luks.c')
-rw-r--r-- | crypto/block-luks.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/crypto/block-luks.c b/crypto/block-luks.c index f12fa2d..25f8a9f 100644 --- a/crypto/block-luks.c +++ b/crypto/block-luks.c @@ -645,6 +645,7 @@ qcrypto_block_luks_open(QCryptoBlock *block, QCryptoHashAlgorithm hash; QCryptoHashAlgorithm ivhash; g_autofree char *password = NULL; + g_autofree char *cipher_mode = NULL; if (!(flags & QCRYPTO_BLOCK_OPEN_NO_IO)) { if (!options->u.luks.key_secret) { @@ -701,6 +702,8 @@ qcrypto_block_luks_open(QCryptoBlock *block, goto fail; } + cipher_mode = g_strdup(luks->header.cipher_mode); + /* * The cipher_mode header contains a string that we have * to further parse, of the format @@ -709,11 +712,11 @@ qcrypto_block_luks_open(QCryptoBlock *block, * * eg cbc-essiv:sha256, cbc-plain64 */ - ivgen_name = strchr(luks->header.cipher_mode, '-'); + ivgen_name = strchr(cipher_mode, '-'); if (!ivgen_name) { ret = -EINVAL; error_setg(errp, "Unexpected cipher mode string format %s", - luks->header.cipher_mode); + cipher_mode); goto fail; } *ivgen_name = '\0'; @@ -735,7 +738,7 @@ qcrypto_block_luks_open(QCryptoBlock *block, } } - ciphermode = qcrypto_block_luks_cipher_mode_lookup(luks->header.cipher_mode, + ciphermode = qcrypto_block_luks_cipher_mode_lookup(cipher_mode, &local_err); if (local_err) { ret = -ENOTSUP; |