From 25bd4163f9a888a033d8432242bfe26a8c56690c Mon Sep 17 00:00:00 2001 From: Manish Bhardwaj Date: Wed, 27 Sep 2023 07:52:18 +0000 Subject: [PATCH] crypto: increase buffer support for SHA operation Using this patches we are making below changes:- 1. increase buffer support for SHA operation from 1MB to 2MB 2. get the IVC DB during init call. Bug 4141706 Change-Id: I8101430117569049f3420db58ed06e0158cc2dcc Signed-off-by: Manish Bhardwaj Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2984637 Reviewed-by: Advaya Andhare Reviewed-by: Sandeep Trasi GVS: Gerrit_Virtual_Submit --- drivers/crypto/tegra-hv-vse-safety.c | 2 +- drivers/crypto/tegra-nvvse-cryptodev.c | 31 +++++++++++--------------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/drivers/crypto/tegra-hv-vse-safety.c b/drivers/crypto/tegra-hv-vse-safety.c index a645c6b7..22331f02 100644 --- a/drivers/crypto/tegra-hv-vse-safety.c +++ b/drivers/crypto/tegra-hv-vse-safety.c @@ -43,7 +43,7 @@ #define SE_MAX_SCHEDULE_TIMEOUT LONG_MAX #define TEGRA_HV_VSE_SHA_MAX_LL_NUM_1 1 -#define TEGRA_HV_VSE_AES_CMAC_MAX_LL_NUM 1 +#define TEGRA_HV_VSE_AES_CMAC_MAX_LL_NUM 2 #define TEGRA_HV_VSE_MAX_TASKS_PER_SUBMIT 1 #define TEGRA_HV_VSE_TIMEOUT (msecs_to_jiffies(10000)) #define TEGRA_HV_VSE_SHA_MAX_BLOCK_SIZE 128 diff --git a/drivers/crypto/tegra-nvvse-cryptodev.c b/drivers/crypto/tegra-nvvse-cryptodev.c index 2a192a4f..4d29adbe 100644 --- a/drivers/crypto/tegra-nvvse-cryptodev.c +++ b/drivers/crypto/tegra-nvvse-cryptodev.c @@ -74,6 +74,8 @@ struct nvvse_devnode { bool sha_init_done; } nvvse_devnode[MAX_NUMBER_MISC_DEVICES]; +static struct tegra_nvvse_get_ivc_db ivc_database; + /* SHA Algorithm Names */ static const char *sha_alg_names[] = { "sha256-vse", @@ -462,6 +464,12 @@ static int tnvvse_crypto_sha_update(struct tnvvse_crypto_ctx *ctx, char *input_buffer = update_ctl->in_buff; int ret; + if (update_ctl->input_buffer_size > ivc_database.max_buffer_size[ctx->node_id]) { + pr_err("%s: Msg size is greater than supported size of %d Bytes\n", __func__, + ivc_database.max_buffer_size[ctx->node_id]); + return -EINVAL; + } + result_buff = sha_state->result_buff; req = sha_state->req; @@ -1879,7 +1887,6 @@ static long tnvvse_crypto_dev_ioctl(struct file *filp, struct tegra_nvvse_aes_drng_ctl *aes_drng_ctl; struct tegra_nvvse_aes_gmac_init_ctl *aes_gmac_init_ctl; struct tegra_nvvse_aes_gmac_sign_verify_ctl *aes_gmac_sign_verify_ctl; - struct tegra_nvvse_get_ivc_db *get_ivc_db; struct tegra_nvvse_tsec_get_keyload_status *tsec_keyload_status; int ret = 0; @@ -2119,27 +2126,12 @@ static long tnvvse_crypto_dev_ioctl(struct file *filp, break; case NVVSE_IOCTL_CMDID_GET_IVC_DB: - get_ivc_db = kzalloc(sizeof(*get_ivc_db), GFP_KERNEL); - if (!get_ivc_db) { - pr_err("%s(): failed to allocate memory\n", __func__); - return -ENOMEM; - } - - ret = tnvvse_crypto_get_ivc_db(get_ivc_db); + ret = copy_to_user((void __user *)arg, &ivc_database, sizeof(ivc_database)); if (ret) { - pr_err("%s(): Failed to get ivc database get_ivc_db:%d\n", __func__, ret); - kfree(get_ivc_db); + pr_err("%s(): Failed to copy_to_user ivc_database:%d\n", __func__, ret); goto out; } - ret = copy_to_user((void __user *)arg, get_ivc_db, sizeof(*get_ivc_db)); - if (ret) { - pr_err("%s(): Failed to copy_to_user get_ivc_db:%d\n", __func__, ret); - kfree(get_ivc_db); - goto out; - } - - kfree(get_ivc_db); break; case NVVSE_IOCTL_CMDID_TSEC_SIGN_VERIFY: @@ -2226,6 +2218,9 @@ static int __init tnvvse_crypto_device_init(void) int ret = 0; struct miscdevice *misc; + /* get ivc databse */ + tnvvse_crypto_get_ivc_db(&ivc_database); + for (cnt = 0; cnt < MAX_NUMBER_MISC_DEVICES; cnt++) { /* Dynamic initialisation of misc device */