bdev/crypto: Error handling fixes in vbdev_crypto_claim()
- Fixed missed spdk_bdev_module_release_bdev() during error handling.
- Fill the keys with zeros before releasing memory.
- Fixed issue with g_number_of_claimed_volumes that can become negative
because of invalid error handling.
Signed-off-by: Yuriy Umanets <yumanets@nvidia.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11628
(cherry picked from commit 3d0bae35c4
)
Change-Id: I8afd6027abb4c8efc332994c5a2997b79583c174
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11856
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
4bf86b75cb
commit
703fceb4a9
@ -1693,8 +1693,7 @@ vbdev_crypto_claim(const char *bdev_name)
|
|||||||
|
|
||||||
if (g_number_of_claimed_volumes >= MAX_CRYPTO_VOLUMES) {
|
if (g_number_of_claimed_volumes >= MAX_CRYPTO_VOLUMES) {
|
||||||
SPDK_DEBUGLOG(vbdev_crypto, "Reached max number of claimed volumes\n");
|
SPDK_DEBUGLOG(vbdev_crypto, "Reached max number of claimed volumes\n");
|
||||||
rc = -EINVAL;
|
return -EINVAL;
|
||||||
goto error_vbdev_alloc;
|
|
||||||
}
|
}
|
||||||
g_number_of_claimed_volumes++;
|
g_number_of_claimed_volumes++;
|
||||||
|
|
||||||
@ -1900,18 +1899,28 @@ error_session_de_create:
|
|||||||
rte_cryptodev_sym_session_free(vbdev->session_encrypt);
|
rte_cryptodev_sym_session_free(vbdev->session_encrypt);
|
||||||
error_session_en_create:
|
error_session_en_create:
|
||||||
error_cant_find_devid:
|
error_cant_find_devid:
|
||||||
|
spdk_bdev_module_release_bdev(vbdev->base_bdev);
|
||||||
error_claim:
|
error_claim:
|
||||||
spdk_bdev_close(vbdev->base_desc);
|
|
||||||
TAILQ_REMOVE(&g_vbdev_crypto, vbdev, link);
|
TAILQ_REMOVE(&g_vbdev_crypto, vbdev, link);
|
||||||
spdk_io_device_unregister(vbdev, NULL);
|
spdk_io_device_unregister(vbdev, NULL);
|
||||||
free(vbdev->xts_key);
|
if (vbdev->xts_key) {
|
||||||
|
memset(vbdev->xts_key, 0, AES_XTS_KEY_LENGTH * 2);
|
||||||
|
free(vbdev->xts_key);
|
||||||
|
}
|
||||||
error_xts_key:
|
error_xts_key:
|
||||||
|
spdk_bdev_close(vbdev->base_desc);
|
||||||
error_open:
|
error_open:
|
||||||
free(vbdev->drv_name);
|
free(vbdev->drv_name);
|
||||||
error_drv_name:
|
error_drv_name:
|
||||||
free(vbdev->key2);
|
if (vbdev->key2) {
|
||||||
|
memset(vbdev->key2, 0, strlen(vbdev->key2));
|
||||||
|
free(vbdev->key2);
|
||||||
|
}
|
||||||
error_alloc_key2:
|
error_alloc_key2:
|
||||||
free(vbdev->key);
|
if (vbdev->key) {
|
||||||
|
memset(vbdev->key, 0, strlen(vbdev->key));
|
||||||
|
free(vbdev->key);
|
||||||
|
}
|
||||||
error_alloc_key:
|
error_alloc_key:
|
||||||
free(vbdev->crypto_bdev.name);
|
free(vbdev->crypto_bdev.name);
|
||||||
error_bdev_name:
|
error_bdev_name:
|
||||||
|
Loading…
Reference in New Issue
Block a user