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 | focaccia-qemu-1c89dfefc4c33295126208225f202f39b5a234c3.tar.gz focaccia-qemu-1c89dfefc4c33295126208225f202f39b5a234c3.zip | |
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 41cf24b737..352c3e8958 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; } |