diff options
author | Markus Armbruster <armbru@redhat.com> | 2025-03-12 11:11:31 +0100 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2025-03-19 07:53:11 +0100 |
commit | 1c89dfefc4c33295126208225f202f39b5a234c3 (patch) | |
tree | 0a707b0576411b766267829691c820db12fd1a31 | |
parent | 1dae461a913f9da88df05de6e2020d3134356f2e (diff) | |
download | qemu-1c89dfefc4c33295126208225f202f39b5a234c3.zip qemu-1c89dfefc4c33295126208225f202f39b5a234c3.tar.gz qemu-1c89dfefc4c33295126208225f202f39b5a234c3.tar.bz2 |
cryptodev: Fix error handling in cryptodev_lkcf_execute_task()
When cryptodev_lkcf_set_op_desc() fails, we report an error, but
continue anyway. This is wrong. We then pass a non-null @local_error
to various functions, which could easily fail error_setv()'s assertion
on failure.
Fail the function instead.
When qcrypto_akcipher_new() fails, we fail the function without
reporting the error. This leaks the Error object.
Add the missing error reporting. This also frees the Error object.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-ID: <20250312101131.1615777-1-armbru@redhat.com>
Reviewed-by: zhenwei pi <pizhenwei@bytedance.com>
-rw-r--r-- | backends/cryptodev-lkcf.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/backends/cryptodev-lkcf.c b/backends/cryptodev-lkcf.c index 41cf24b..352c3e8 100644 --- a/backends/cryptodev-lkcf.c +++ b/backends/cryptodev-lkcf.c @@ -330,6 +330,8 @@ static void cryptodev_lkcf_execute_task(CryptoDevLKCFTask *task) cryptodev_lkcf_set_op_desc(&session->akcipher_opts, op_desc, sizeof(op_desc), &local_error) != 0) { error_report_err(local_error); + status = -VIRTIO_CRYPTO_ERR; + goto out; } else { key_id = add_key(KCTL_KEY_TYPE_PKEY, "lkcf-backend-priv-key", p8info, p8info_len, KCTL_KEY_RING); @@ -346,6 +348,7 @@ static void cryptodev_lkcf_execute_task(CryptoDevLKCFTask *task) session->key, session->keylen, &local_error); if (!akcipher) { + error_report_err(local_error); status = -VIRTIO_CRYPTO_ERR; goto out; } |