libwd/0074-uadk-cleanup-hpre-code.patch
Wenkai Lin d2ed8a299c libwd backport for uadk from 2.3.29 to 2.3.31
Update some patch for uadk from mainline.
To get more infomation, please visit the homepage:
https://github.com/Linaro/uadk

Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
2022-03-22 11:52:29 +08:00

348 lines
12 KiB
Diff

From 50b68c0405544702181deb9dda28381169b17d09 Mon Sep 17 00:00:00 2001
From: Junchong Pan <panjunchong@hisilicon.com>
Date: Fri, 4 Mar 2022 02:25:54 +0000
Subject: [PATCH 081/109] uadk: cleanup hpre code
Includes:
1.Remove useless interface param.
2.Remove ASSERT.
3.Remove print address.
Signed-off-by: Junchong Pan <panjunchong@hisilicon.com>
---
drv/hisi_hpre.c | 26 +++++++++++++++-------
drv/hisi_qm_udrv.c | 2 --
v1/drv/hisi_hpre_udrv.c | 48 ++++++++++++++++++++++++++++-------------
v1/wd_ecc.c | 24 ++++++++++-----------
wd_ecc.c | 24 ++++++++++-----------
5 files changed, 75 insertions(+), 49 deletions(-)
diff --git a/drv/hisi_hpre.c b/drv/hisi_hpre.c
index fbb38e0..f1d7720 100644
--- a/drv/hisi_hpre.c
+++ b/drv/hisi_hpre.c
@@ -127,7 +127,7 @@ static bool is_hpre_bin_fmt(const char *data, int dsz, int bsz)
}
static int crypto_bin_to_hpre_bin(char *dst, const char *src,
- int b_size, int d_size, const char *p_name)
+ __u32 b_size, __u32 d_size, const char *p_name)
{
int i = d_size - 1;
bool is_hpre_bin;
@@ -1469,6 +1469,11 @@ static struct wd_ecc_out *create_ecdh_out(struct wd_ecc_msg *msg)
struct wd_ecc_dh_out *dh_out;
struct wd_ecc_out *out;
+ if (!hsz) {
+ WD_ERR("get msg key size error!\n");
+ return NULL;
+ }
+
out = malloc(len);
if (!out) {
WD_ERR("failed to alloc, sz = %u!\n", len);
@@ -1601,6 +1606,11 @@ static int ecc_fill(struct wd_ecc_msg *msg, struct hisi_hpre_sqe *hw_msg)
return -WD_EINVAL;
}
+ if (!hw_sz) {
+ WD_ERR("get msg key size error!\n");
+ return -WD_EINVAL;
+ }
+
memset(hw_msg, 0, sizeof(*hw_msg));
/* prepare algorithm */
@@ -1646,7 +1656,7 @@ static int sm2_enc_send(handle_t ctx, struct wd_ecc_msg *msg)
handle_t h_qp = (handle_t)wd_ctx_get_priv(ctx);
struct wd_sm2_enc_in *ein = msg->req.src;
struct wd_ecc_msg *msg_dst[2] = {NULL};
- struct hisi_hpre_sqe hw_msg[2] = {{0}};
+ struct hisi_hpre_sqe hw_msg[2] = {0};
struct wd_hash_mt *hash = &msg->hash;
__u16 send_cnt = 0;
int ret;
@@ -1918,7 +1928,7 @@ static __u32 get_hash_bytes(__u8 type)
return val;
}
-static void msg_pack(char *dst, __u64 dst_len, __u64 *out_len,
+static void msg_pack(char *dst, __u64 *out_len,
const void *src, __u32 src_len)
{
if (unlikely(!src || !src_len))
@@ -1961,8 +1971,8 @@ static int sm2_kdf(struct wd_dtb *out, struct wd_ecc_point *x2y2,
ctr[2] = (i >> 8) & 0xFF;
ctr[1] = (i >> 16) & 0xFF;
ctr[0] = (i >> 24) & 0xFF;
- msg_pack(p_in, lens, &in_len, x2y2->x.data, x2y2_len);
- msg_pack(p_in, lens, &in_len, ctr, sizeof(ctr));
+ msg_pack(p_in, &in_len, x2y2->x.data, x2y2_len);
+ msg_pack(p_in, &in_len, ctr, sizeof(ctr));
t_out = m_len >= h_bytes ? tmp : p_out;
ret = hash->cb(p_in, in_len, t_out, h_bytes, hash->usr);
@@ -2026,9 +2036,9 @@ static int sm2_hash(struct wd_dtb *out, struct wd_ecc_point *x2y2,
if (unlikely(!p_in))
return -WD_ENOMEM;
- msg_pack(p_in, lens, &in_len, x2y2->x.data, x2y2->x.dsize);
- msg_pack(p_in, lens, &in_len, msg->data, msg->dsize);
- msg_pack(p_in, lens, &in_len, x2y2->y.data, x2y2->y.dsize);
+ msg_pack(p_in, &in_len, x2y2->x.data, x2y2->x.dsize);
+ msg_pack(p_in, &in_len, msg->data, msg->dsize);
+ msg_pack(p_in, &in_len, x2y2->y.data, x2y2->y.dsize);
ret = hash->cb(p_in, in_len, hash_out, h_bytes, hash->usr);
if (unlikely(ret)) {
WD_ERR("failed to hash cb, ret = %d!\n", ret);
diff --git a/drv/hisi_qm_udrv.c b/drv/hisi_qm_udrv.c
index 845fa46..2e692a1 100644
--- a/drv/hisi_qm_udrv.c
+++ b/drv/hisi_qm_udrv.c
@@ -896,8 +896,6 @@ void hisi_qm_dump_sgl(void *sgl)
int i;
while (tmp) {
- WD_ERR("sgl = %p\n", tmp);
- WD_ERR("sgl->next_dma : 0x%lx\n", tmp->next_dma);
WD_ERR("sgl->entry_sum_in_chain : %u\n",
tmp->entry_sum_in_chain);
WD_ERR("sgl->entry_sum_in_sgl : %u\n",
diff --git a/v1/drv/hisi_hpre_udrv.c b/v1/drv/hisi_hpre_udrv.c
index c6ca0ad..ba32114 100644
--- a/v1/drv/hisi_hpre_udrv.c
+++ b/v1/drv/hisi_hpre_udrv.c
@@ -499,7 +499,6 @@ int qm_fill_rsa_sqe(void *message, struct qm_queue_info *info, __u16 i)
hw_msg->low_tag = tag->ctx_id;
hw_msg->done = 0x1;
hw_msg->etype = 0x0;
- ASSERT(!info->req_cache[i]);
info->req_cache[i] = msg;
return WD_SUCCESS;
@@ -517,7 +516,10 @@ int qm_parse_rsa_sqe(void *msg, const struct qm_queue_info *info,
__u16 kbytes;
int ret;
- ASSERT(rsa_msg);
+ if (unlikely(!rsa_msg)) {
+ WD_ERR("info->req_cache is null at index:%hu\n", i);
+ return 0;
+ }
/* if this hardware message not belong to me, then try again */
if (usr && LOW_U16(hw_msg->low_tag) != usr)
@@ -700,7 +702,6 @@ int qm_fill_dh_sqe(void *message, struct qm_queue_info *info, __u16 i)
if (unlikely(ret))
goto map_xp_fail;
}
- ASSERT(!info->req_cache[i]);
info->req_cache[i] = msg;
ret = qm_final_fill_dh_sqe(q, msg, hw_msg);
@@ -726,7 +727,11 @@ int qm_parse_dh_sqe(void *msg, const struct qm_queue_info *info,
struct wd_queue *q = info->q;
int ret;
- ASSERT(dh_msg);
+ if (unlikely(!dh_msg)) {
+ WD_ERR("info->req_cache is null at index:%hu\n", i);
+ return 0;
+ }
+
if (usr && LOW_U16(hw_msg->low_tag) != usr)
return 0;
if (hw_msg->done != HPRE_HW_TASK_DONE || hw_msg->etype) {
@@ -1668,7 +1673,6 @@ static int qm_fill_ecc_sqe_general(void *message, struct qm_queue_info *info,
hw_msg->low_tag = tag->ctx_id;
hw_msg->done = 0x1;
hw_msg->etype = 0x0;
- ASSERT(!info->req_cache[i]);
info->req_cache[i] = msg;
return WD_SUCCESS;
@@ -1942,6 +1946,7 @@ static int fill_sm2_dec_sqe(void *message, struct qm_queue_info *info, __u16 i)
struct wd_mm_br *br = &qinfo->br;
__u32 ksz = req_src->key_bytes;
struct wcrypto_ecc_msg *dst;
+ int ret;
/* c2 data lens <= 4096 bit */
if (din->c2.dsize <= BITS_TO_BYTES(4096) &&
@@ -1966,11 +1971,21 @@ static int fill_sm2_dec_sqe(void *message, struct qm_queue_info *info, __u16 i)
dst->in = (void *)&din->c1;
dst->out = br->alloc(br->usr, ECDH_OUT_PARAMS_SZ(ksz));
if (unlikely(!dst->out)) {
- free(dst);
- return -WD_ENOMEM;
+ ret = -WD_ENOMEM;
+ goto free_dst;
}
- return qm_fill_ecc_sqe_general(dst, info, i);
+ ret = qm_fill_ecc_sqe_general(dst, info, i);
+ if (ret)
+ goto free_out;
+
+ return ret;
+
+free_out:
+ br->free(br->usr, dst->out);
+free_dst:
+ free(dst);
+ return ret;
}
int qm_fill_ecc_sqe(void *message, struct qm_queue_info *info, __u16 i)
@@ -1997,7 +2012,10 @@ static int qm_parse_ecc_sqe_general(void *msg, const struct qm_queue_info *info,
__u16 kbytes;
int ret;
- ASSERT(ecc_msg);
+ if (unlikely(!ecc_msg)) {
+ WD_ERR("info->req_cache is null at index:%hu\n", i);
+ return 0;
+ }
/* if this hw msg not belong to me, then try again */
if (usr && LOW_U16(hw_msg->low_tag) != usr)
@@ -2146,7 +2164,7 @@ static __u32 get_hash_bytes(__u8 type)
return val;
}
-static void msg_pack(char *dst, __u64 dst_len, __u64 *out_len,
+static void msg_pack(char *dst, __u64 *out_len,
const void *src, __u32 src_len)
{
if (unlikely(!src || !src_len))
@@ -2191,8 +2209,8 @@ static int sm2_kdf(struct wd_dtb *out, struct wcrypto_ecc_point *x2y2,
ctr[1] = (i >> 16) & 0xFF;
ctr[0] = (i >> 24) & 0xFF;
in_len = 0;
- msg_pack(p_in, lens, &in_len, x2y2->x.data, x2y2_len);
- msg_pack(p_in, lens, &in_len, ctr, sizeof(ctr));
+ msg_pack(p_in, &in_len, x2y2->x.data, x2y2_len);
+ msg_pack(p_in, &in_len, ctr, sizeof(ctr));
t_out = m_len >= h_bytes ? tmp : p_out;
ret = hash->cb(p_in, in_len, t_out, h_bytes, hash->usr);
@@ -2257,9 +2275,9 @@ static int sm2_hash(struct wd_dtb *out, struct wcrypto_ecc_point *x2y2,
if (unlikely(!p_in))
return -WD_ENOMEM;
- msg_pack(p_in, lens, &in_len, x2y2->x.data, x2y2->x.dsize);
- msg_pack(p_in, lens, &in_len, msg->data, msg->dsize);
- msg_pack(p_in, lens, &in_len, x2y2->y.data, x2y2->y.dsize);
+ msg_pack(p_in, &in_len, x2y2->x.data, x2y2->x.dsize);
+ msg_pack(p_in, &in_len, msg->data, msg->dsize);
+ msg_pack(p_in, &in_len, x2y2->y.data, x2y2->y.dsize);
ret = hash->cb(p_in, in_len, hash_out, h_bytes, hash->usr);
if (unlikely(ret)) {
WD_ERR("failed to hash cb, ret = %d!\n", ret);
diff --git a/v1/wd_ecc.c b/v1/wd_ecc.c
index c710d8a..2358243 100644
--- a/v1/wd_ecc.c
+++ b/v1/wd_ecc.c
@@ -1508,7 +1508,7 @@ static int ecc_request_init(struct wcrypto_ecc_msg *req,
return WD_SUCCESS;
}
-static void msg_pack(char *dst, __u64 dst_len, __u64 *out_len,
+static void msg_pack(char *dst, __u64 *out_len,
const void *src, __u32 src_len)
{
if (unlikely(!src || !src_len))
@@ -1831,17 +1831,17 @@ static int sm2_compute_za_hash(__u8 *za, __u32 *len, struct wd_dtb *id,
memset(p_in, 0, lens);
temp = id_bits >> 8;
- msg_pack(p_in, lens, &in_len, &temp, sizeof(__u8));
+ msg_pack(p_in, &in_len, &temp, sizeof(__u8));
temp = id_bits & 0xFF;
- msg_pack(p_in, lens, &in_len, &temp, sizeof(__u8));
+ msg_pack(p_in, &in_len, &temp, sizeof(__u8));
if (id)
- msg_pack(p_in, lens, &in_len, id->data, id_bytes);
- msg_pack(p_in, lens, &in_len, cv->a.data, key_size);
- msg_pack(p_in, lens, &in_len, cv->b.data, key_size);
- msg_pack(p_in, lens, &in_len, cv->g.x.data, key_size);
- msg_pack(p_in, lens, &in_len, cv->g.y.data, key_size);
- msg_pack(p_in, lens, &in_len, pub->x.data, key_size);
- msg_pack(p_in, lens, &in_len, pub->y.data, key_size);
+ msg_pack(p_in, &in_len, id->data, id_bytes);
+ msg_pack(p_in, &in_len, cv->a.data, key_size);
+ msg_pack(p_in, &in_len, cv->b.data, key_size);
+ msg_pack(p_in, &in_len, cv->g.x.data, key_size);
+ msg_pack(p_in, &in_len, cv->g.y.data, key_size);
+ msg_pack(p_in, &in_len, pub->x.data, key_size);
+ msg_pack(p_in, &in_len, pub->y.data, key_size);
hash_bytes = get_hash_bytes(hash->type);
*len = hash_bytes;
@@ -1885,8 +1885,8 @@ static int sm2_compute_digest(void *ctx, struct wd_dtb *hash_msg,
/* e = h(ZA || M) */
memset(p_in, 0, lens);
- msg_pack(p_in, lens, &in_len, za, za_len);
- msg_pack(p_in, lens, &in_len, plaintext->data, plaintext->dsize);
+ msg_pack(p_in, &in_len, za, za_len);
+ msg_pack(p_in, &in_len, plaintext->data, plaintext->dsize);
hash_msg->dsize = hash_bytes;
ret = hash->cb((const char *)p_in, in_len, hash_msg->data,
hash_bytes, hash->usr);
diff --git a/wd_ecc.c b/wd_ecc.c
index 3232e67..a9994b2 100644
--- a/wd_ecc.c
+++ b/wd_ecc.c
@@ -1396,7 +1396,7 @@ static int fill_ecc_msg(struct wd_ecc_msg *msg, struct wd_ecc_req *req,
return WD_SUCCESS;
}
-static void msg_pack(char *dst, __u64 dst_len, __u64 *out_len,
+static void msg_pack(char *dst, __u64 *out_len,
const void *src, __u32 src_len)
{
if (!src || !src_len)
@@ -1596,17 +1596,17 @@ static int sm2_compute_za_hash(__u8 *za, __u32 *len, struct wd_dtb *id,
memset(p_in, 0, lens);
temp = id_bits >> 8;
- msg_pack(p_in, lens, &in_len, &temp, sizeof(__u8));
+ msg_pack(p_in, &in_len, &temp, sizeof(__u8));
temp = id_bits & 0xFF;
- msg_pack(p_in, lens, &in_len, &temp, sizeof(__u8));
+ msg_pack(p_in, &in_len, &temp, sizeof(__u8));
if (id)
- msg_pack(p_in, lens, &in_len, id->data, id_bytes);
- msg_pack(p_in, lens, &in_len, cv->a.data, key_size);
- msg_pack(p_in, lens, &in_len, cv->b.data, key_size);
- msg_pack(p_in, lens, &in_len, cv->g.x.data, key_size);
- msg_pack(p_in, lens, &in_len, cv->g.y.data, key_size);
- msg_pack(p_in, lens, &in_len, pub->x.data, key_size);
- msg_pack(p_in, lens, &in_len, pub->y.data, key_size);
+ msg_pack(p_in, &in_len, id->data, id_bytes);
+ msg_pack(p_in, &in_len, cv->a.data, key_size);
+ msg_pack(p_in, &in_len, cv->b.data, key_size);
+ msg_pack(p_in, &in_len, cv->g.x.data, key_size);
+ msg_pack(p_in, &in_len, cv->g.y.data, key_size);
+ msg_pack(p_in, &in_len, pub->x.data, key_size);
+ msg_pack(p_in, &in_len, pub->y.data, key_size);
hash_bytes = get_hash_bytes(hash->type);
*len = hash_bytes;
ret = hash->cb((const char *)p_in, in_len,
@@ -1649,8 +1649,8 @@ static int sm2_compute_digest(struct wd_ecc_sess *sess, struct wd_dtb *hash_msg,
/* e = h(ZA || M) */
memset(p_in, 0, lens);
- msg_pack(p_in, lens, &in_len, za, za_len);
- msg_pack(p_in, lens, &in_len, plaintext->data, plaintext->dsize);
+ msg_pack(p_in, &in_len, za, za_len);
+ msg_pack(p_in, &in_len, plaintext->data, plaintext->dsize);
hash_msg->dsize = hash_bytes;
ret = hash->cb((const char *)p_in, in_len, hash_msg->data,
hash_bytes, hash->usr);
--
2.27.0