When erasing a keyslot we deliberately ignore some errors and carry on trying to erase as much as possible. This results in overwriting Error objects and triggering an assertion. Don't pass in the &local_err, if errp is already set.
Fixes: https://gitlab.com/qemu-project/qemu/-/work_items/4697 Signed-off-by: Daniel P. Berrangé <[email protected]> --- crypto/block-luks.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crypto/block-luks.c b/crypto/block-luks.c index 0926ad28f0c..277a5110607 100644 --- a/crypto/block-luks.c +++ b/crypto/block-luks.c @@ -1152,6 +1152,7 @@ qcrypto_block_luks_erase_key(QCryptoBlock *block, if (ret < 0) { error_propagate(errp, local_err); + local_err = NULL; } /* * Now try to erase the key material, even if the header @@ -1169,6 +1170,7 @@ qcrypto_block_luks_erase_key(QCryptoBlock *block, if (i > 0) { return -1; } + local_err = NULL; } if (writefunc(block, slot->key_offset_sector * QCRYPTO_BLOCK_LUKS_SECTOR_SIZE, -- 2.56.0
