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 <mbhardwaj@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2984637
Reviewed-by: Advaya Andhare <aandhare@nvidia.com>
Reviewed-by: Sandeep Trasi <strasi@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
Manish Bhardwaj
2023-09-27 07:52:18 +00:00
committed by mobile promotions
parent e7f2897cee
commit 25bd4163f9
2 changed files with 14 additions and 19 deletions

View File

@@ -43,7 +43,7 @@
#define SE_MAX_SCHEDULE_TIMEOUT LONG_MAX #define SE_MAX_SCHEDULE_TIMEOUT LONG_MAX
#define TEGRA_HV_VSE_SHA_MAX_LL_NUM_1 1 #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_MAX_TASKS_PER_SUBMIT 1
#define TEGRA_HV_VSE_TIMEOUT (msecs_to_jiffies(10000)) #define TEGRA_HV_VSE_TIMEOUT (msecs_to_jiffies(10000))
#define TEGRA_HV_VSE_SHA_MAX_BLOCK_SIZE 128 #define TEGRA_HV_VSE_SHA_MAX_BLOCK_SIZE 128

View File

@@ -74,6 +74,8 @@ struct nvvse_devnode {
bool sha_init_done; bool sha_init_done;
} nvvse_devnode[MAX_NUMBER_MISC_DEVICES]; } nvvse_devnode[MAX_NUMBER_MISC_DEVICES];
static struct tegra_nvvse_get_ivc_db ivc_database;
/* SHA Algorithm Names */ /* SHA Algorithm Names */
static const char *sha_alg_names[] = { static const char *sha_alg_names[] = {
"sha256-vse", "sha256-vse",
@@ -462,6 +464,12 @@ static int tnvvse_crypto_sha_update(struct tnvvse_crypto_ctx *ctx,
char *input_buffer = update_ctl->in_buff; char *input_buffer = update_ctl->in_buff;
int ret; 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; result_buff = sha_state->result_buff;
req = sha_state->req; 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_drng_ctl *aes_drng_ctl;
struct tegra_nvvse_aes_gmac_init_ctl *aes_gmac_init_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_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; struct tegra_nvvse_tsec_get_keyload_status *tsec_keyload_status;
int ret = 0; int ret = 0;
@@ -2119,27 +2126,12 @@ static long tnvvse_crypto_dev_ioctl(struct file *filp,
break; break;
case NVVSE_IOCTL_CMDID_GET_IVC_DB: case NVVSE_IOCTL_CMDID_GET_IVC_DB:
get_ivc_db = kzalloc(sizeof(*get_ivc_db), GFP_KERNEL); ret = copy_to_user((void __user *)arg, &ivc_database, sizeof(ivc_database));
if (!get_ivc_db) {
pr_err("%s(): failed to allocate memory\n", __func__);
return -ENOMEM;
}
ret = tnvvse_crypto_get_ivc_db(get_ivc_db);
if (ret) { if (ret) {
pr_err("%s(): Failed to get ivc database get_ivc_db:%d\n", __func__, ret); pr_err("%s(): Failed to copy_to_user ivc_database:%d\n", __func__, ret);
kfree(get_ivc_db);
goto out; 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; break;
case NVVSE_IOCTL_CMDID_TSEC_SIGN_VERIFY: case NVVSE_IOCTL_CMDID_TSEC_SIGN_VERIFY:
@@ -2226,6 +2218,9 @@ static int __init tnvvse_crypto_device_init(void)
int ret = 0; int ret = 0;
struct miscdevice *misc; struct miscdevice *misc;
/* get ivc databse */
tnvvse_crypto_get_ivc_db(&ivc_database);
for (cnt = 0; cnt < MAX_NUMBER_MISC_DEVICES; cnt++) { for (cnt = 0; cnt < MAX_NUMBER_MISC_DEVICES; cnt++) {
/* Dynamic initialisation of misc device */ /* Dynamic initialisation of misc device */