2020-09-10 12:20:10

by Meng Yu

[permalink] [raw]
Subject: [PATCH 0/3] crypto: hisilicon/hpre - misc clean up and fixes

Adjust some tiny coding problems and fix a bug of DH algorithm.

Meng Yu (3):
crypto: hisilicon/hpre - delete an useless member
crypto: hisilicon/hpre - adjust some coding style
crypto: hisilicon/hpre - fix a bug in dh algorithm

drivers/crypto/hisilicon/hpre/hpre.h | 1 -
drivers/crypto/hisilicon/hpre/hpre_crypto.c | 15 +++++++--------
2 files changed, 7 insertions(+), 9 deletions(-)

--
2.8.1


2020-09-10 12:22:10

by Meng Yu

[permalink] [raw]
Subject: [PATCH 2/3] crypto: hisilicon/hpre - adjust some coding style

Adjust some coding style to make code aligned.

Signed-off-by: Meng Yu <[email protected]>
---
drivers/crypto/hisilicon/hpre/hpre_crypto.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/drivers/crypto/hisilicon/hpre/hpre_crypto.c b/drivers/crypto/hisilicon/hpre/hpre_crypto.c
index d685992..0cbe99a1 100644
--- a/drivers/crypto/hisilicon/hpre/hpre_crypto.c
+++ b/drivers/crypto/hisilicon/hpre/hpre_crypto.c
@@ -188,8 +188,7 @@ static int hpre_get_data_dma_addr(struct hpre_asym_request *hpre_req,
hpre_req->dst = NULL;
dma_dir = DMA_FROM_DEVICE;
}
- *tmp = dma_map_single(dev, sg_virt(data),
- len, dma_dir);
+ *tmp = dma_map_single(dev, sg_virt(data), len, dma_dir);
if (unlikely(dma_mapping_error(dev, *tmp))) {
dev_err(dev, "dma map data err!\n");
return -ENOMEM;
@@ -239,8 +238,8 @@ static int hpre_hw_data_init(struct hpre_asym_request *hpre_req,
((is_dh && !is_src) || !is_dh))
ret = hpre_get_data_dma_addr(hpre_req, data, len, is_src, &tmp);
else
- ret = hpre_prepare_dma_buf(hpre_req, data, len,
- is_src, &tmp);
+ ret = hpre_prepare_dma_buf(hpre_req, data, len, is_src, &tmp);
+
if (unlikely(ret))
return ret;

@@ -267,11 +266,9 @@ static void hpre_hw_data_clr_all(struct hpre_ctx *ctx,

if (src) {
if (req->src)
- dma_free_coherent(dev, ctx->key_sz,
- req->src, tmp);
+ dma_free_coherent(dev, ctx->key_sz, req->src, tmp);
else
- dma_unmap_single(dev, tmp,
- ctx->key_sz, DMA_TO_DEVICE);
+ dma_unmap_single(dev, tmp, ctx->key_sz, DMA_TO_DEVICE);
}

tmp = le64_to_cpu(sqe->out);
--
2.8.1

2020-09-10 12:22:52

by Meng Yu

[permalink] [raw]
Subject: [PATCH 3/3] crypto: hisilicon/hpre - fix a bug in dh algorithm

Using 'g' equals 5 in dh algorithm may cause an error like this:

arm-smmu-v3 arm-smmu-v3.1.auto: event 0x10 received:
dh: Party A: generate public key test failed. err -22
11375.065672] dh alg: dh: test failed on vector 1, err=-22
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000790000000010
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000120800000080
hpre-dh self test failed
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000000000000000
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000000000000000
arm-smmu-v3 arm-smmu-v3.1.auto: event 0x10 received:
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000790000000010
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000120800000083
arm-smmu-v3 arm-smmu-v3.1.auto: 0x00000000000000c0
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000000000000000
arm-smmu-v3 arm-smmu-v3.1.auto: event 0x10 received:
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000790000000010
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000120800000081
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000000000000040
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000000000000000
arm-smmu-v3 arm-smmu-v3.1.auto: event 0x10 received:
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000790000000010
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000120800000082
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000000000000080
arm-smmu-v3 arm-smmu-v3.1.auto: 0x0000000000000000
hisi_hpre 0000:79:00.0: dat_rd_poison_int_set [error status=0x8] found
hisi_hpre 0000:79:00.0: ooo_rdrsp_err_int_set [error status=0xfc00] found
hisi_hpre 0000:79:00.0: Controller resetting...
hisi_hpre 0000:79:00.0: Controller reset complete
{2}[Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 0
{2}[Hardware Error]: event severity: recoverable
{2}[Hardware Error]: Error 0, type: recoverable
{2}[Hardware Error]: section type: unknown, c8b328a8-9917-4af6-9a13-2e08ab2e7586
{2}[Hardware Error]: section length: 0x4c

as we didn't allocate memory for msg->in.

Fixes: c8b4b477079d("crypto: hisilicon - add HiSilicon HPRE accelerator")
Signed-off-by: Meng Yu <[email protected]>
---
drivers/crypto/hisilicon/hpre/hpre_crypto.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/crypto/hisilicon/hpre/hpre_crypto.c b/drivers/crypto/hisilicon/hpre/hpre_crypto.c
index 0cbe99a1..2d91593 100644
--- a/drivers/crypto/hisilicon/hpre/hpre_crypto.c
+++ b/drivers/crypto/hisilicon/hpre/hpre_crypto.c
@@ -528,6 +528,8 @@ static int hpre_dh_compute_value(struct kpp_request *req)
ret = hpre_hw_data_init(hpre_req, req->src, req->src_len, 1, 1);
if (unlikely(ret))
goto clear_all;
+ } else {
+ msg->in = cpu_to_le64((u64)ctx->dh.dma_g);
}

ret = hpre_hw_data_init(hpre_req, req->dst, req->dst_len, 0, 1);
--
2.8.1

2020-09-18 07:16:41

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH 3/3] crypto: hisilicon/hpre - fix a bug in dh algorithm

On Thu, Sep 10, 2020 at 07:25:22PM +0800, Meng Yu wrote:
>
> diff --git a/drivers/crypto/hisilicon/hpre/hpre_crypto.c b/drivers/crypto/hisilicon/hpre/hpre_crypto.c
> index 0cbe99a1..2d91593 100644
> --- a/drivers/crypto/hisilicon/hpre/hpre_crypto.c
> +++ b/drivers/crypto/hisilicon/hpre/hpre_crypto.c
> @@ -528,6 +528,8 @@ static int hpre_dh_compute_value(struct kpp_request *req)
> ret = hpre_hw_data_init(hpre_req, req->src, req->src_len, 1, 1);
> if (unlikely(ret))
> goto clear_all;
> + } else {
> + msg->in = cpu_to_le64((u64)ctx->dh.dma_g);

Why do you need the u64 cast?

Cheers,
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt