crypto threads
Subsystems (2)
cover crypto threads
Hi all.
These series are preliminary step before moving encryption code in qcow2 to the threads. The first attempt of doing it is on list ([PATCH 00/11] qcow2: encryption threads :
https://lists.gnu.org/archive/html/qemu-block/2018-11/msg00729.html)
But it's approach with multiplying the whole QCryptoBlock per thread was rejected. So, here is a solution to maintain multitasking inside QCryptoBlock.
Patch 01 may be considered as 3.1-rc4 material, others are ofcourse for 4.0.
Vladimir Sementsov-Ogievskiy (5):
crypto/block-luks: fix memory leak in qcrypto_block_luks_create crypto/block: refactor qcrypto_block_*crypt_helper functions crypto/block: rename qcrypto_block_*crypt_helper crypto/block: introduce qcrypto_block_*crypt_helper functions
crypto: support multiple threads accessing one QCryptoBlock
crypto/blockpriv.h | 42 ++++++-- include/crypto/block.h | 16 ++- block/crypto.c | 1 + block/qcow.c | 2 +- block/qcow2.c | 4 +- crypto/block-luks.c | 60 +++++------ crypto/block-qcow.c | 26 ++--- crypto/block.c | 210 ++++++++++++++++++++++++++++---------- tests/test-crypto-block.c | 2 + 9 files changed, 257 insertions(+), 106 deletions(-)
Signature · 1 line
2.18.0
PATCH 1/5 crypto/block-luks: fix memory leak in qcrypto_block_luks_create
Free block->cipher and block->ivgen on error path.
--- crypto/block-luks.c | 3 +++ 1 file changed, 3 insertions(+)
crypto/block-luks.c +3 -0
@@ -1341,6 +1341,9 @@ qcrypto_block_luks_create(QCryptoBlock *block,qcrypto_ivgen_free (ivgen);qcrypto_cipher_free (cipher); +qcrypto_cipher_free (block->cipher); +qcrypto_ivgen_free (block->ivgen); +g_free (luks);return -1 ; }
Signature · 1 line
2.18.0
Re: [Qemu-devel] [PATCH for-3.1? 1/5] crypto/block-luks: fix memory leak in qcrypto_block_luks_create
Quoted 13 lines · Vladimir Sementsov-Ogievskiy
Free
block->cipherandblock->ivgenon error path.Signed-off-by Vladimir Sementsov-Ogievskiy <[email protected]>--- crypto/block-luks.c | 3 +++ 1 file changed, 3 insertions(+)crypto/block-luks.c +0
-0
crypto/block-luks.c qcrypto_block_luks_create(QCryptoBlock *block,
Quoted 10 lines
crypto/block-luks.c +3
-1@@ -1341,6 +1341,9 @@ qcrypto_block_luks_create(QCryptoBlock *block,qcrypto_ivgen_free (ivgen);qcrypto_cipher_free (cipher); +qcrypto_cipher_free (block->cipher); +qcrypto_ivgen_free (block->ivgen); +g_free (luks);return -1 ; } --
Too late for 3.1, I'm afraid. You should probably add the cc tag for stable.
thanks
-- PMM
PATCH 2/5 crypto/block: refactor qcrypto_block_*crypt_helper functions
In reply to Vladimir Sementsov-Ogievskiyqcrypto_block_encrypt_helper and qcrypto_block_decrypt_helper are almost identical, let's reduce code duplication and simplify further improvements.
--- crypto/block.c | 81 +++++++++++++++++++------------------------------- 1 file changed, 31 insertions(+), 50 deletions(-)
crypto/block.c +31 -50
@@ -190,14 +190,21 @@ void qcrypto_block_free(QCryptoBlock *block) } -int qcrypto_block_decrypt_helper (QCryptoCipher *cipher, -size_t niv, -QCryptoIVGen *ivgen, -int sectorsize, -uint64_t offset, -uint8_t *buf, -size_t len, -Error **errp) +typedef int (*QCryptoCipherEncryptFunc )(QCryptoCipher *cipher, +const void *in, +void *out, +size_t len, +Error **errp); + +static int do_qcrypto_block_encrypt (QCryptoCipher *cipher, +size_t niv, +QCryptoIVGen *ivgen, +int sectorsize, +uint64_t offset, +uint8_t *buf, +size_t len, +QCryptoCipherEncryptFunc func, +Error **errp) {uint8_t *iv;int ret =-1 ;
@@ -226,8 +233,7 @@ int qcrypto_block_decrypt_helper(QCryptoCipher *cipher, } nbytes = len > sectorsize ? sectorsize : len; -if (qcrypto_cipher_decrypt (cipher, buf, buf, - nbytes, errp) <0 ) { +if (func (cipher, buf, buf, nbytes, errp) <0 ) { goto cleanup; }
@@ -243,7 +249,7 @@ int qcrypto_block_decrypt_helper(QCryptoCipher *cipher, } -int qcrypto_block_encrypt_helper(QCryptoCipher *cipher, +int qcrypto_block_decrypt_helper(QCryptoCipher *cipher, size_t niv, QCryptoIVGen *ivgen, int sectorsize,
@@ -252,45 +258,20 @@ int qcrypto_block_encrypt_helper(QCryptoCipher *cipher,size_t len, Error **errp) { - uint8_t *iv; -int ret =-1 ; -uint64_t startsector = offset / sectorsize; - -assert (QEMU_IS_ALIGNED (offset, sectorsize)); -assert (QEMU_IS_ALIGNED (len, sectorsize)); - - iv = niv ?g_new0 (uint8_t, niv) :NULL ; - -while (len >0 ) { -size_t nbytes; -if (niv) { -if (qcrypto_ivgen_calculate (ivgen, - startsector, - iv, niv, - errp) <0 ) { - goto cleanup; - } - -if (qcrypto_cipher_setiv (cipher, - iv, niv, - errp) <0 ) { - goto cleanup; - } - } - - nbytes = len > sectorsize ? sectorsize : len; -if (qcrypto_cipher_encrypt (cipher, buf, buf, - nbytes, errp) <0 ) { - goto cleanup; - } + return do_qcrypto_block_encrypt(cipher, niv, ivgen, sectorsize, offset, +buf ,len ,qcrypto_cipher_decrypt ,errp ); +} - startsector++; - buf += nbytes; - len -= nbytes; - } - ret =0 ; - cleanup: -g_free (iv); -return ret; +int qcrypto_block_encrypt_helper (QCryptoCipher *cipher, +size_t niv, +QCryptoIVGen *ivgen, +int sectorsize, +uint64_t offset, +uint8_t *buf, +size_t len, +Error **errp) +{ +return do_qcrypto_block_encrypt (cipher, niv, ivgen, sectorsize, offset, + buf, len, qcrypto_cipher_encrypt, errp); }
Signature · 1 line
2.18.0
PATCH 3/5 crypto/block: rename qcrypto_block_*crypt_helper
In reply to Vladimir Sementsov-OgievskiyRename qcrypto_block_*crypt_helper to qcrypto_cipher_*crypt_helper, as it's not about QCryptoBlock. This is needed to introduce qcrypto_block_*crypt_helper in the next commit, which will have QCryptoBlock pointer and than will be able to use additional fields of it, which in turn will be used to implement thread-safe QCryptoBlock operations.
--- crypto/blockpriv.h | 34 +++++++++++++------------- crypto/block-luks.c | 44 +++++++++++++++++----------------- crypto/block-qcow.c | 16 ++++++------- crypto/block.c | 58 ++++++++++++++++++++++----------------------- 4 files changed, 76 insertions(+), 76 deletions(-)
crypto/blockpriv.h +17 -17
@@ -78,22 +78,22 @@ struct QCryptoBlockDriver { }; -int qcrypto_block_decrypt_helper (QCryptoCipher *cipher, -size_t niv, -QCryptoIVGen *ivgen, -int sectorsize, -uint64_t offset, -uint8_t *buf, -size_t len, -Error **errp); - -int qcrypto_block_encrypt_helper (QCryptoCipher *cipher, -size_t niv, -QCryptoIVGen *ivgen, -int sectorsize, -uint64_t offset, -uint8_t *buf, -size_t len, -Error **errp); +int qcrypto_cipher_decrypt_helper (QCryptoCipher *cipher, +size_t niv, +QCryptoIVGen *ivgen, +int sectorsize, +uint64_t offset, +uint8_t *buf, +size_t len, +Error **errp); + +int qcrypto_cipher_encrypt_helper (QCryptoCipher *cipher, +size_t niv, +QCryptoIVGen *ivgen, +int sectorsize, +uint64_t offset, +uint8_t *buf, +size_t len, +Error **errp);#endif /* QCRYPTO_BLOCKPRIV_H */
crypto/block-luks.c +22 -22
68 lines not on this page · raw message
crypto/block-qcow.c +8 -8
@@ -152,10 +152,10 @@ qcrypto_block_qcow_decrypt(QCryptoBlock *block, {assert (QEMU_IS_ALIGNED (offset,QCRYPTO_BLOCK_QCOW_SECTOR_SIZE ));assert (QEMU_IS_ALIGNED (len,QCRYPTO_BLOCK_QCOW_SECTOR_SIZE )); -return qcrypto_block_decrypt_helper (block->cipher, - block->niv, block->ivgen, -QCRYPTO_BLOCK_QCOW_SECTOR_SIZE , - offset, buf, len, errp); +return qcrypto_cipher_decrypt_helper (block->cipher, + block->niv, block->ivgen, +QCRYPTO_BLOCK_QCOW_SECTOR_SIZE , + offset, buf, len, errp); }
@@ -168,10 +168,10 @@ qcrypto_block_qcow_encrypt(QCryptoBlock *block, {assert (QEMU_IS_ALIGNED (offset,QCRYPTO_BLOCK_QCOW_SECTOR_SIZE ));assert (QEMU_IS_ALIGNED (len,QCRYPTO_BLOCK_QCOW_SECTOR_SIZE )); -return qcrypto_block_encrypt_helper (block->cipher, - block->niv, block->ivgen, -QCRYPTO_BLOCK_QCOW_SECTOR_SIZE , - offset, buf, len, errp); +return qcrypto_cipher_encrypt_helper (block->cipher, + block->niv, block->ivgen, +QCRYPTO_BLOCK_QCOW_SECTOR_SIZE , + offset, buf, len, errp); }
crypto/block.c +29 -29
73 lines not on this page · raw message
Signature · 1 line
2.18.0
PATCH 4/5 crypto/block: introduce qcrypto_block_*crypt_helper functions
In reply to Vladimir Sementsov-OgievskiyIntroduce QCryptoBlock-based functions and use them where possible. This is needed to implement thread-safe encrypt/decrypt operations.
--- crypto/blockpriv.h | 14 ++++++++++++++ crypto/block-luks.c | 14 ++++++-------- crypto/block-qcow.c | 14 ++++++-------- crypto/block.c | 26 ++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 16 deletions(-)
crypto/blockpriv.h +14 -0
@@ -96,4 +96,18 @@ int qcrypto_cipher_encrypt_helper(QCryptoCipher *cipher,size_t len, Error **errp); +int qcrypto_block_decrypt_helper (QCryptoBlock *block, +int sectorsize, +uint64_t offset, +uint8_t *buf, +size_t len, +Error **errp); + +int qcrypto_block_encrypt_helper (QCryptoBlock *block, +int sectorsize, +uint64_t offset, +uint8_t *buf, +size_t len, +Error **errp); +#endif /* QCRYPTO_BLOCKPRIV_H */
crypto/block-luks.c +6 -8
@@ -1409,10 +1409,9 @@ qcrypto_block_luks_decrypt(QCryptoBlock *block, {assert (QEMU_IS_ALIGNED (offset,QCRYPTO_BLOCK_LUKS_SECTOR_SIZE ));assert (QEMU_IS_ALIGNED (len,QCRYPTO_BLOCK_LUKS_SECTOR_SIZE )); -return qcrypto_cipher_decrypt_helper (block->cipher, - block->niv, block->ivgen, -QCRYPTO_BLOCK_LUKS_SECTOR_SIZE , - offset, buf, len, errp); +return qcrypto_block_decrypt_helper (block, +QCRYPTO_BLOCK_LUKS_SECTOR_SIZE , + offset, buf, len, errp); }
@@ -1425,10 +1424,9 @@ qcrypto_block_luks_encrypt(QCryptoBlock *block, {assert (QEMU_IS_ALIGNED (offset,QCRYPTO_BLOCK_LUKS_SECTOR_SIZE ));assert (QEMU_IS_ALIGNED (len,QCRYPTO_BLOCK_LUKS_SECTOR_SIZE )); -return qcrypto_cipher_encrypt_helper (block->cipher, - block->niv, block->ivgen, -QCRYPTO_BLOCK_LUKS_SECTOR_SIZE , - offset, buf, len, errp); +return qcrypto_block_encrypt_helper (block, +QCRYPTO_BLOCK_LUKS_SECTOR_SIZE , + offset, buf, len, errp); }
crypto/block-qcow.c +6 -8
@@ -152,10 +152,9 @@ qcrypto_block_qcow_decrypt(QCryptoBlock *block, {assert (QEMU_IS_ALIGNED (offset,QCRYPTO_BLOCK_QCOW_SECTOR_SIZE ));assert (QEMU_IS_ALIGNED (len,QCRYPTO_BLOCK_QCOW_SECTOR_SIZE )); -return qcrypto_cipher_decrypt_helper (block->cipher, - block->niv, block->ivgen, -QCRYPTO_BLOCK_QCOW_SECTOR_SIZE , - offset, buf, len, errp); +return qcrypto_block_decrypt_helper (block, +QCRYPTO_BLOCK_QCOW_SECTOR_SIZE , + offset, buf, len, errp); }
@@ -168,10 +167,9 @@ qcrypto_block_qcow_encrypt(QCryptoBlock *block, {assert (QEMU_IS_ALIGNED (offset,QCRYPTO_BLOCK_QCOW_SECTOR_SIZE ));assert (QEMU_IS_ALIGNED (len,QCRYPTO_BLOCK_QCOW_SECTOR_SIZE )); -return qcrypto_cipher_encrypt_helper (block->cipher, - block->niv, block->ivgen, -QCRYPTO_BLOCK_QCOW_SECTOR_SIZE , - offset, buf, len, errp); +return qcrypto_block_encrypt_helper (block, +QCRYPTO_BLOCK_QCOW_SECTOR_SIZE , + offset, buf, len, errp); }
crypto/block.c +26 -0
@@ -275,3 +275,29 @@ int qcrypto_cipher_encrypt_helper(QCryptoCipher *cipher,return do_qcrypto_cipher_encrypt (cipher, niv, ivgen, sectorsize, offset, buf, len, qcrypto_cipher_encrypt, errp); } + + +int qcrypto_block_decrypt_helper (QCryptoBlock *block, +int sectorsize, +uint64_t offset, +uint8_t *buf, +size_t len, +Error **errp) +{ +return do_qcrypto_cipher_encrypt (block->cipher, block->niv, block->ivgen, + sectorsize, offset, buf, len, + qcrypto_cipher_decrypt, errp); +} + + +int qcrypto_block_encrypt_helper (QCryptoBlock *block, +int sectorsize, +uint64_t offset, +uint8_t *buf, +size_t len, +Error **errp) +{ +return do_qcrypto_cipher_encrypt (block->cipher, block->niv, block->ivgen, + sectorsize, offset, buf, len, + qcrypto_cipher_encrypt, errp); +}
Signature · 1 line
2.18.0
PATCH 5/5 crypto: support multiple threads accessing one QCryptoBlock
In reply to Vladimir Sementsov-OgievskiyThe two thing that should be handled are cipher and ivgen. For ivgen the solution is just mutex, as iv calculations should not be long in comparison with encryption/decryption. And for cipher let's just keep per-thread ciphers.
--- crypto/blockpriv.h | 16 ++++- include/crypto/block.h | 16 ++++- block/crypto.c | 1 + block/qcow.c | 2 +- block/qcow2.c | 4 +- crypto/block-luks.c | 25 +++---- crypto/block-qcow.c | 20 +++--- crypto/block.c | 135 ++++++++++++++++++++++++++++++++------ tests/test-crypto-block.c | 2 + 9 files changed, 176 insertions(+), 45 deletions(-)
crypto/blockpriv.h +15 -1
@@ -22,6 +22,7 @@#define QCRYPTO_BLOCKPRIV_H #include "crypto/block.h" +#include "qemu/thread.h" typedef struct QCryptoBlockDriver QCryptoBlockDriver ;
@@ -31,8 +32,12 @@ struct QCryptoBlock {const QCryptoBlockDriver *driver;void *opaque; -QCryptoCipher *cipher; +QCryptoCipher **ciphers; +int n_ciphers; +int n_free_ciphers;QCryptoIVGen *ivgen; +QemuMutex mutex; +QCryptoHashAlgorithm kdfhash;size_t niv;uint64_t payload_offset;/* In bytes */
@@ -46,6 +51,7 @@ struct QCryptoBlockDriver {QCryptoBlockReadFunc readfunc, void *opaque, unsigned int flags, + int n_threads, Error **errp); int (*create)(QCryptoBlock *block,
@@ -110,4 +116,12 @@ int qcrypto_block_encrypt_helper(QCryptoBlock *block,size_t len, Error **errp); +int qcrypto_block_init_cipher (QCryptoBlock *block, +QCryptoCipherAlgorithm alg, +QCryptoCipherMode mode, +const uint8_t *key,size_t nkey, +int n_threads,Error **errp); + +void qcrypto_block_free_cipher (QCryptoBlock *block); +#endif /* QCRYPTO_BLOCKPRIV_H */
include/crypto/block.h +15 -1
@@ -75,6 +75,8 @@ typedef enum {* @readfunc: callback for reading data from the volume * @opaque: data to pass to @readfunc * @flags: bitmask of QCryptoBlockOpenFlags values +* @n_threads: prepare block to multi tasking with up to +* @n_threads threads * @errp: pointer to a NULL-initialized error object * * Create a new block encryption object for an existing
@@ -107,6 +109,7 @@ QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,QCryptoBlockReadFunc readfunc, void *opaque, unsigned int flags, + int n_threads, Error **errp);/**
@@ -202,12 +205,23 @@ int qcrypto_block_encrypt(QCryptoBlock *block,* qcrypto_block_get_cipher: * @block: the block encryption object * -* Get the cipher to use for payload encryption +* Get the cipher to use for payload encryption. Must be paired with +* qcrypto_block_put_cipher. * * Returns: the cipher object */ QCryptoCipher *qcrypto_block_get_cipher (QCryptoBlock *block); +/** +* qcrypto_block_put_cipher: +* @block: the block encryption object +* +* Put cipher back to the block. Must follow qcrypto_block_get_cipher. +* +* Returns: the cipher object +*/ +void qcrypto_block_put_cipher (QCryptoBlock *block,QCryptoCipher *cipher); +/** * qcrypto_block_get_ivgen: * @block: the block encryption object
block/crypto.c +1 -0
@@ -229,6 +229,7 @@ static int block_crypto_open_generic(QCryptoBlockFormat format, block_crypto_read_func, bs, cflags, +1 , errp);if (!crypto->block) {
block/qcow.c +1 -1
@@ -213,7 +213,7 @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags, cflags |=QCRYPTO_BLOCK_OPEN_NO_IO ; } s->crypto =qcrypto_block_open (crypto_opts,"encrypt." , -NULL ,NULL , cflags, errp); +NULL ,NULL , cflags,1 , errp);if (!s->crypto) { ret = -EINVAL ; goto fail;
block/qcow2.c +2 -2
@@ -294,7 +294,7 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, } s->crypto =qcrypto_block_open (s->crypto_opts,"encrypt." , qcow2_crypto_hdr_read_func, - bs, cflags, errp); + bs, cflags,1 , errp);if (!s->crypto) {return -EINVAL ; }
@@ -1445,7 +1445,7 @@ static int coroutine_fn qcow2_do_open(BlockDriverState *bs, QDict *options, cflags |=QCRYPTO_BLOCK_OPEN_NO_IO ; } s->crypto =qcrypto_block_open (s->crypto_opts,"encrypt." , -NULL ,NULL , cflags, errp); +NULL ,NULL , cflags,1 , errp);if (!s->crypto) { ret = -EINVAL ; goto fail;
crypto/block-luks.c +13 -12
@@ -636,6 +636,7 @@ qcrypto_block_luks_open(QCryptoBlock *block,QCryptoBlockReadFunc readfunc, void *opaque, unsigned int flags, + int n_threads, Error **errp) { QCryptoBlockLUKS *luks;
@@ -836,11 +837,10 @@ qcrypto_block_luks_open(QCryptoBlock *block, goto fail; } - block->cipher =qcrypto_cipher_new (cipheralg, - ciphermode, - masterkey, masterkeylen, - errp); -if (!block->cipher) { + ret =qcrypto_block_init_cipher (block, cipheralg, ciphermode, + masterkey, masterkeylen, n_threads, + errp); +if (ret <0 ) { ret = -ENOTSUP ; goto fail; }
@@ -863,7 +863,7 @@ qcrypto_block_luks_open(QCryptoBlock *block, fail:g_free (masterkey); -qcrypto_cipher_free (block->cipher); +qcrypto_block_free_cipher (block);qcrypto_ivgen_free (block->ivgen);g_free (luks);g_free (password);
@@ -888,6 +888,7 @@ qcrypto_block_luks_create(QCryptoBlock *block,void *opaque, Error **errp) { + int ret;QCryptoBlockLUKS *luks;QCryptoBlockCreateOptionsLUKS luks_opts;Error *local_err =NULL ;
@@ -1030,11 +1031,11 @@ qcrypto_block_luks_create(QCryptoBlock *block,/* Setup the block device payload encryption objects */ - block->cipher =qcrypto_cipher_new (luks_opts.cipher_alg, - luks_opts.cipher_mode, - masterkey, luks->header.key_bytes, - errp); -if (!block->cipher) { + ret =qcrypto_block_init_cipher (block, luks_opts.cipher_alg, + luks_opts.cipher_mode, + masterkey, luks->header.key_bytes, +1 , errp); +if (ret <0 ) { goto error; }
@@ -1341,7 +1342,7 @@ qcrypto_block_luks_create(QCryptoBlock *block,qcrypto_ivgen_free (ivgen);qcrypto_cipher_free (cipher); -qcrypto_cipher_free (block->cipher); +qcrypto_block_free_cipher (block);qcrypto_ivgen_free (block->ivgen);g_free (luks);
crypto/block-qcow.c +11 -9
@@ -44,6 +44,7 @@ qcrypto_block_qcow_has_format(const uint8_t *buf G_GNUC_UNUSED,static int qcrypto_block_qcow_init (QCryptoBlock *block,const char *keysecret, +int n_threads,Error **errp) {char *password;
@@ -71,11 +72,11 @@ qcrypto_block_qcow_init(QCryptoBlock *block, goto fail; } - block->cipher =qcrypto_cipher_new (QCRYPTO_CIPHER_ALG_AES_128 , -QCRYPTO_CIPHER_MODE_CBC , - keybuf,G_N_ELEMENTS (keybuf), - errp); -if (!block->cipher) { + ret =qcrypto_block_init_cipher (block,QCRYPTO_CIPHER_ALG_AES_128 , +QCRYPTO_CIPHER_MODE_CBC , + keybuf,G_N_ELEMENTS (keybuf), + n_threads, errp); +if (ret <0 ) { ret = -ENOTSUP ; goto fail; }
@@ -86,7 +87,7 @@ qcrypto_block_qcow_init(QCryptoBlock *block,return 0 ; fail: -qcrypto_cipher_free (block->cipher); +qcrypto_block_free_cipher (block);qcrypto_ivgen_free (block->ivgen);return ret; }
@@ -99,6 +100,7 @@ qcrypto_block_qcow_open(QCryptoBlock *block, QCryptoBlockReadFunc readfunc G_GNUC_UNUSED, void *opaque G_GNUC_UNUSED, unsigned int flags, + int n_threads, Error **errp) { if (flags & QCRYPTO_BLOCK_OPEN_NO_IO) {
@@ -112,8 +114,8 @@ qcrypto_block_qcow_open(QCryptoBlock *block, optprefix ? optprefix : "");return -1 ; } -return qcrypto_block_qcow_init (block, - options->u.qcow.key_secret, errp); +return qcrypto_block_qcow_init (block, options->u.qcow.key_secret, + n_threads, errp); } }
@@ -133,7 +135,7 @@ qcrypto_block_qcow_create(QCryptoBlock *block,return -1 ; }/* QCow2 has no special header, since everything is hardwired */ -return qcrypto_block_qcow_init (block, options->u.qcow.key_secret, errp); +return qcrypto_block_qcow_init (block, options->u.qcow.key_secret,1 , errp); }
crypto/block.c +116 -19
211 lines not on this page · raw message
tests/test-crypto-block.c +2 -0
@@ -269,6 +269,8 @@ static void test_block_assert_setup(const struct QCryptoBlockTestData *data, qcrypto_ivgen_get_algorithm(ivgen)); g_assert_cmpint(data->ivgen_hash, ==,qcrypto_ivgen_get_hash (ivgen)); + +qcrypto_block_put_cipher (blk, cipher); }
Signature · 1 line
2.18.0
Patchew URL: https://patchew.org/QEMU/[email protected]/
Patchew URL: https://patchew.org/QEMU/[email protected]/
Hi,
This series failed the docker-quick@centos7 build test. Please find the testing commands and their output below. If you have Docker installed, you can probably reproduce it locally.
=== TEST SCRIPT BEGIN ===
#!/bin/bash
time make docker-test-quick@centos7 SHOW_ENV=1 J=8 === TEST SCRIPT END ===
libpmem support no
libudev no
WARNING: Use of SDL 1.2 is deprecated and will be removed in
WARNING: future releases. Please switch to using SDL 2.0
NOTE: cross-compilers enabled: 'cc'
GEN x86_64-softmmu/config-devices.mak.tmp
---
CC tests/usb-hcd-uhci-test.o
CC tests/usb-hcd-xhci-test.o/tmp/qemu-test/src/tests/test-crypto-block.c: In function 'test_block':/tmp/qemu-test/src/tests/test-crypto-block.c:310:30: error: passing argument 6 of 'qcrypto_block_open' makes integer from pointer without a cast [-Werror]
NULL);
^
In file included from /tmp/qemu-test/src/tests/test-crypto-block.c:24:0:
/tmp/qemu-test/src/include/crypto/block.h:107:15: note: expected 'int' but argument is of type 'void *'
QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,
^
/tmp/qemu-test/src/tests/test-crypto-block.c:310:30: error: too few arguments to function 'qcrypto_block_open'
NULL);
^
In file included from /tmp/qemu-test/src/tests/test-crypto-block.c:24:0:
/tmp/qemu-test/src/include/crypto/block.h:107:15: note: declared here
QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,
^
/tmp/qemu-test/src/tests/test-crypto-block.c:318:30: error: passing argument 6 of 'qcrypto_block_open' makes integer from pointer without a cast [-Werror]
&error_abort);
^
In file included from /tmp/qemu-test/src/tests/test-crypto-block.c:24:0:
/tmp/qemu-test/src/include/crypto/block.h:107:15: note: expected 'int' but argument is of type 'struct Error **'
QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,
^
/tmp/qemu-test/src/tests/test-crypto-block.c:318:30: error: too few arguments to function 'qcrypto_block_open'
&error_abort);
^
In file included from /tmp/qemu-test/src/tests/test-crypto-block.c:24:0:
/tmp/qemu-test/src/include/crypto/block.h:107:15: note: declared here
QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,
^
/tmp/qemu-test/src/tests/test-crypto-block.c:332:30: error: passing argument 6 of 'qcrypto_block_open' makes integer from pointer without a cast [-Werror]
&error_abort);
^
In file included from /tmp/qemu-test/src/tests/test-crypto-block.c:24:0:
/tmp/qemu-test/src/include/crypto/block.h:107:15: note: expected 'int' but argument is of type 'struct Error **'
QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,
^
/tmp/qemu-test/src/tests/test-crypto-block.c:332:30: error: too few arguments to function 'qcrypto_block_open'
&error_abort);
^In file included from /tmp/qemu-test/src/tests/test-crypto-block.c:24:0:
The full log is available at
http://patchew.org/logs/[email protected]/testing.docker-quick@centos7/?type=message.
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to [email protected]