LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 0/5] crypto: hisilicon - some misc bugfix for SEC engine
@ 2021-07-31 3:26 Kai Ye
2021-07-31 3:26 ` [PATCH 1/5] crypto: hisilicon/sec - fixup icv checking enabled on Kunpeng 930 Kai Ye
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Kai Ye @ 2021-07-31 3:26 UTC (permalink / raw)
To: herbert; +Cc: linux-crypto, linux-kernel, wangzhou1, yekai13
some misc bugfix for SEC engine.
Kai Ye (5):
crypto: hisilicon/sec - fixup icv checking enabled on Kunpeng 930
crypto: hisilicon/sec - delete the print of fallback tfm application
failure
crypto: hisilicon/sec - fix the max length of AAD for the CCM mode
crypto: hisilicon/sec - fix the CTR mode BD configuration
crypto: hisilicon/sec - use the correct print format
drivers/crypto/hisilicon/sec2/sec_crypto.c | 30 ++++++++++++++++++++----------
drivers/crypto/hisilicon/sec2/sec_crypto.h | 6 ++++--
2 files changed, 24 insertions(+), 12 deletions(-)
--
2.7.4
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/5] crypto: hisilicon/sec - fixup icv checking enabled on Kunpeng 930
2021-07-31 3:26 [PATCH 0/5] crypto: hisilicon - some misc bugfix for SEC engine Kai Ye
@ 2021-07-31 3:26 ` Kai Ye
2021-07-31 3:26 ` [PATCH 2/5] crypto: hisilicon/sec - delete the print of fallback tfm application failure Kai Ye
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Kai Ye @ 2021-07-31 3:26 UTC (permalink / raw)
To: herbert; +Cc: linux-crypto, linux-kernel, wangzhou1, yekai13
Fixup icv(integrity check value) checking enabled wrong on
Kunpeng 930
Signed-off-by: Kai Ye <yekai13@huawei.com>
---
drivers/crypto/hisilicon/sec2/sec_crypto.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/crypto/hisilicon/sec2/sec_crypto.c b/drivers/crypto/hisilicon/sec2/sec_crypto.c
index 6a45bd23..bf93c98 100644
--- a/drivers/crypto/hisilicon/sec2/sec_crypto.c
+++ b/drivers/crypto/hisilicon/sec2/sec_crypto.c
@@ -1614,7 +1614,7 @@ static void sec_auth_bd_fill_ex_v3(struct sec_auth_ctx *ctx, int dir,
sqe3->auth_mac_key |= cpu_to_le32((u32)SEC_AUTH_TYPE1);
sqe3->huk_iv_seq &= SEC_CIPHER_AUTH_V3;
} else {
- sqe3->auth_mac_key |= cpu_to_le32((u32)SEC_AUTH_TYPE1);
+ sqe3->auth_mac_key |= cpu_to_le32((u32)SEC_AUTH_TYPE2);
sqe3->huk_iv_seq |= SEC_AUTH_CIPHER_V3;
}
sqe3->a_len_key = cpu_to_le32(c_req->c_len + aq->assoclen);
--
2.7.4
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/5] crypto: hisilicon/sec - delete the print of fallback tfm application failure
2021-07-31 3:26 [PATCH 0/5] crypto: hisilicon - some misc bugfix for SEC engine Kai Ye
2021-07-31 3:26 ` [PATCH 1/5] crypto: hisilicon/sec - fixup icv checking enabled on Kunpeng 930 Kai Ye
@ 2021-07-31 3:26 ` Kai Ye
2021-08-06 8:31 ` Herbert Xu
2021-07-31 3:26 ` [PATCH 3/5] crypto: hisilicon/sec - fix the max length of AAD for the CCM mode Kai Ye
` (2 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Kai Ye @ 2021-07-31 3:26 UTC (permalink / raw)
To: herbert; +Cc: linux-crypto, linux-kernel, wangzhou1, yekai13
Modify the print of information that might lead to user misunderstanding.
Currently only XTS mode need the fallback tfm when using 192bit key.
Others algs not need soft fallback tfm. So others algs can return
directly.
Signed-off-by: Kai Ye <yekai13@huawei.com>
---
drivers/crypto/hisilicon/sec2/sec_crypto.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/crypto/hisilicon/sec2/sec_crypto.c b/drivers/crypto/hisilicon/sec2/sec_crypto.c
index bf93c98..b3ac1bd 100644
--- a/drivers/crypto/hisilicon/sec2/sec_crypto.c
+++ b/drivers/crypto/hisilicon/sec2/sec_crypto.c
@@ -641,15 +641,15 @@ static int sec_skcipher_fbtfm_init(struct crypto_skcipher *tfm)
struct sec_cipher_ctx *c_ctx = &ctx->c_ctx;
c_ctx->fallback = false;
+
+ /* Currently, only XTS mode need fallback tfm when using 192bit key */
if (likely(strncmp(alg, "xts", SEC_XTS_NAME_SZ)))
return 0;
c_ctx->fbtfm = crypto_alloc_sync_skcipher(alg, 0,
CRYPTO_ALG_NEED_FALLBACK);
- if (IS_ERR(c_ctx->fbtfm)) {
- pr_err("failed to alloc fallback tfm!\n");
- return PTR_ERR(c_ctx->fbtfm);
- }
+ if (IS_ERR(c_ctx->fbtfm))
+ c_ctx->fbtfm = NULL;
return 0;
}
@@ -808,7 +808,7 @@ static int sec_skcipher_setkey(struct crypto_skcipher *tfm, const u8 *key,
}
memcpy(c_ctx->c_key, key, keylen);
- if (c_ctx->fallback) {
+ if (c_ctx->fallback && c_ctx->fbtfm) {
ret = crypto_sync_skcipher_setkey(c_ctx->fbtfm, key, keylen);
if (ret) {
dev_err(dev, "failed to set fallback skcipher key!\n");
@@ -2032,13 +2032,12 @@ static int sec_skcipher_soft_crypto(struct sec_ctx *ctx,
struct skcipher_request *sreq, bool encrypt)
{
struct sec_cipher_ctx *c_ctx = &ctx->c_ctx;
+ SYNC_SKCIPHER_REQUEST_ON_STACK(subreq, c_ctx->fbtfm);
struct device *dev = ctx->dev;
int ret;
- SYNC_SKCIPHER_REQUEST_ON_STACK(subreq, c_ctx->fbtfm);
-
if (!c_ctx->fbtfm) {
- dev_err(dev, "failed to check fallback tfm\n");
+ dev_err(dev, "the soft tfm isn't supported in the current system.\n");
return -EINVAL;
}
--
2.7.4
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/5] crypto: hisilicon/sec - fix the max length of AAD for the CCM mode
2021-07-31 3:26 [PATCH 0/5] crypto: hisilicon - some misc bugfix for SEC engine Kai Ye
2021-07-31 3:26 ` [PATCH 1/5] crypto: hisilicon/sec - fixup icv checking enabled on Kunpeng 930 Kai Ye
2021-07-31 3:26 ` [PATCH 2/5] crypto: hisilicon/sec - delete the print of fallback tfm application failure Kai Ye
@ 2021-07-31 3:26 ` Kai Ye
2021-08-06 8:32 ` Herbert Xu
2021-07-31 3:26 ` [PATCH 4/5] crypto: hisilicon/sec - fix the CTR mode BD configuration Kai Ye
2021-07-31 3:26 ` [PATCH 5/5] crypto: hisilicon/sec - use the correct print format Kai Ye
4 siblings, 1 reply; 8+ messages in thread
From: Kai Ye @ 2021-07-31 3:26 UTC (permalink / raw)
To: herbert; +Cc: linux-crypto, linux-kernel, wangzhou1, yekai13
Fix the maximum length of AAD for the CCM mode due to the hardware limited
Signed-off-by: Kai Ye <yekai13@huawei.com>
---
drivers/crypto/hisilicon/sec2/sec_crypto.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/crypto/hisilicon/sec2/sec_crypto.c b/drivers/crypto/hisilicon/sec2/sec_crypto.c
index b3ac1bd..010bde9 100644
--- a/drivers/crypto/hisilicon/sec2/sec_crypto.c
+++ b/drivers/crypto/hisilicon/sec2/sec_crypto.c
@@ -63,6 +63,7 @@
#define SEC_AUTH_CIPHER 0x1
#define SEC_MAX_MAC_LEN 64
#define SEC_MAX_AAD_LEN 65535
+#define SEC_MAX_CCM_AAD_LEN 65279
#define SEC_TOTAL_MAC_SZ (SEC_MAX_MAC_LEN * QM_Q_DEPTH)
#define SEC_PBUF_SZ 512
@@ -2218,6 +2219,10 @@ static int sec_aead_spec_check(struct sec_ctx *ctx, struct sec_req *sreq)
}
if (c_mode == SEC_CMODE_CCM) {
+ if (unlikely(req->assoclen > SEC_MAX_CCM_AAD_LEN)) {
+ dev_err(dev, "CCM input aad parameter is too long!\n");
+ return -EINVAL;
+ }
ret = aead_iv_demension_check(req);
if (ret) {
dev_err(dev, "aead input iv param error!\n");
--
2.7.4
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 4/5] crypto: hisilicon/sec - fix the CTR mode BD configuration
2021-07-31 3:26 [PATCH 0/5] crypto: hisilicon - some misc bugfix for SEC engine Kai Ye
` (2 preceding siblings ...)
2021-07-31 3:26 ` [PATCH 3/5] crypto: hisilicon/sec - fix the max length of AAD for the CCM mode Kai Ye
@ 2021-07-31 3:26 ` Kai Ye
2021-07-31 3:26 ` [PATCH 5/5] crypto: hisilicon/sec - use the correct print format Kai Ye
4 siblings, 0 replies; 8+ messages in thread
From: Kai Ye @ 2021-07-31 3:26 UTC (permalink / raw)
To: herbert; +Cc: linux-crypto, linux-kernel, wangzhou1, yekai13
The CTR counter is 32bit rollover default on the BD.
But the NIST standard is 128bit rollover. it cause the
testing failed, so need to fix the BD configuration.
Signed-off-by: Kai Ye <yekai13@huawei.com>
---
drivers/crypto/hisilicon/sec2/sec_crypto.c | 6 ++++++
drivers/crypto/hisilicon/sec2/sec_crypto.h | 6 ++++--
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/crypto/hisilicon/sec2/sec_crypto.c b/drivers/crypto/hisilicon/sec2/sec_crypto.c
index 010bde9..3b698ad 100644
--- a/drivers/crypto/hisilicon/sec2/sec_crypto.c
+++ b/drivers/crypto/hisilicon/sec2/sec_crypto.c
@@ -42,6 +42,8 @@
#define SEC_DE_OFFSET_V3 9
#define SEC_SCENE_OFFSET_V3 5
#define SEC_CKEY_OFFSET_V3 13
+#define SEC_CTR_CNT_OFFSET 25
+#define SEC_CTR_CNT_ROLLOVER 2
#define SEC_SRC_SGL_OFFSET_V3 11
#define SEC_DST_SGL_OFFSET_V3 14
#define SEC_CALG_OFFSET_V3 4
@@ -1301,6 +1303,10 @@ static int sec_skcipher_bd_fill_v3(struct sec_ctx *ctx, struct sec_req *req)
cipher = SEC_CIPHER_DEC;
sec_sqe3->c_icv_key |= cpu_to_le16(cipher);
+ /* Set the CTR counter mode is 128bit rollover */
+ sec_sqe3->auth_mac_key = cpu_to_le32((u32)SEC_CTR_CNT_ROLLOVER <<
+ SEC_CTR_CNT_OFFSET);
+
if (req->use_pbuf) {
bd_param |= SEC_PBUF << SEC_SRC_SGL_OFFSET_V3;
bd_param |= SEC_PBUF << SEC_DST_SGL_OFFSET_V3;
diff --git a/drivers/crypto/hisilicon/sec2/sec_crypto.h b/drivers/crypto/hisilicon/sec2/sec_crypto.h
index 9f71c35..5e039b5 100644
--- a/drivers/crypto/hisilicon/sec2/sec_crypto.h
+++ b/drivers/crypto/hisilicon/sec2/sec_crypto.h
@@ -354,8 +354,10 @@ struct sec_sqe3 {
* akey_len: 9~14 bits
* a_alg: 15~20 bits
* key_sel: 21~24 bits
- * updata_key: 25 bits
- * reserved: 26~31 bits
+ * ctr_count_mode/sm4_xts: 25~26 bits
+ * sva_prefetch: 27 bits
+ * key_wrap_num: 28~30 bits
+ * update_key: 31 bits
*/
__le32 auth_mac_key;
__le32 salt;
--
2.7.4
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 5/5] crypto: hisilicon/sec - use the correct print format
2021-07-31 3:26 [PATCH 0/5] crypto: hisilicon - some misc bugfix for SEC engine Kai Ye
` (3 preceding siblings ...)
2021-07-31 3:26 ` [PATCH 4/5] crypto: hisilicon/sec - fix the CTR mode BD configuration Kai Ye
@ 2021-07-31 3:26 ` Kai Ye
4 siblings, 0 replies; 8+ messages in thread
From: Kai Ye @ 2021-07-31 3:26 UTC (permalink / raw)
To: herbert; +Cc: linux-crypto, linux-kernel, wangzhou1, yekai13
Use the correct print format. Printing an unsigned int value should
use %u instead of %d.
Signed-off-by: Kai Ye <yekai13@huawei.com>
---
drivers/crypto/hisilicon/sec2/sec_crypto.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/crypto/hisilicon/sec2/sec_crypto.c b/drivers/crypto/hisilicon/sec2/sec_crypto.c
index 3b698ad..6cdc8a2 100644
--- a/drivers/crypto/hisilicon/sec2/sec_crypto.c
+++ b/drivers/crypto/hisilicon/sec2/sec_crypto.c
@@ -240,7 +240,7 @@ static void sec_req_cb(struct hisi_qp *qp, void *resp)
if (unlikely(type != type_supported)) {
atomic64_inc(&dfx->err_bd_cnt);
- pr_err("err bd type [%d]\n", type);
+ pr_err("err bd type [%u]\n", type);
return;
}
--
2.7.4
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/5] crypto: hisilicon/sec - delete the print of fallback tfm application failure
2021-07-31 3:26 ` [PATCH 2/5] crypto: hisilicon/sec - delete the print of fallback tfm application failure Kai Ye
@ 2021-08-06 8:31 ` Herbert Xu
0 siblings, 0 replies; 8+ messages in thread
From: Herbert Xu @ 2021-08-06 8:31 UTC (permalink / raw)
To: Kai Ye; +Cc: linux-crypto, linux-kernel, wangzhou1
On Sat, Jul 31, 2021 at 11:26:33AM +0800, Kai Ye wrote:
> Modify the print of information that might lead to user misunderstanding.
> Currently only XTS mode need the fallback tfm when using 192bit key.
> Others algs not need soft fallback tfm. So others algs can return
> directly.
>
> Signed-off-by: Kai Ye <yekai13@huawei.com>
> ---
> drivers/crypto/hisilicon/sec2/sec_crypto.c | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
I don't think this is a good change.
> @@ -2032,13 +2032,12 @@ static int sec_skcipher_soft_crypto(struct sec_ctx *ctx,
> struct skcipher_request *sreq, bool encrypt)
> {
> struct sec_cipher_ctx *c_ctx = &ctx->c_ctx;
> + SYNC_SKCIPHER_REQUEST_ON_STACK(subreq, c_ctx->fbtfm);
> struct device *dev = ctx->dev;
> int ret;
>
> - SYNC_SKCIPHER_REQUEST_ON_STACK(subreq, c_ctx->fbtfm);
> -
> if (!c_ctx->fbtfm) {
> - dev_err(dev, "failed to check fallback tfm\n");
> + dev_err(dev, "the soft tfm isn't supported in the current system.\n");
If we end up in this code path you'll be spamming the printk buffer
on every single request. This is not acceptable. At least rate limit
these messages.
Thanks,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/5] crypto: hisilicon/sec - fix the max length of AAD for the CCM mode
2021-07-31 3:26 ` [PATCH 3/5] crypto: hisilicon/sec - fix the max length of AAD for the CCM mode Kai Ye
@ 2021-08-06 8:32 ` Herbert Xu
0 siblings, 0 replies; 8+ messages in thread
From: Herbert Xu @ 2021-08-06 8:32 UTC (permalink / raw)
To: Kai Ye; +Cc: linux-crypto, linux-kernel, wangzhou1
On Sat, Jul 31, 2021 at 11:26:34AM +0800, Kai Ye wrote:
>
> @@ -2218,6 +2219,10 @@ static int sec_aead_spec_check(struct sec_ctx *ctx, struct sec_req *sreq)
> }
>
> if (c_mode == SEC_CMODE_CCM) {
> + if (unlikely(req->assoclen > SEC_MAX_CCM_AAD_LEN)) {
> + dev_err(dev, "CCM input aad parameter is too long!\n");
> + return -EINVAL;
> + }
You shouldn't be printing messages on a code path that can be
triggered by userspace without rate limit.
Thanks,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-08-06 8:32 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-31 3:26 [PATCH 0/5] crypto: hisilicon - some misc bugfix for SEC engine Kai Ye
2021-07-31 3:26 ` [PATCH 1/5] crypto: hisilicon/sec - fixup icv checking enabled on Kunpeng 930 Kai Ye
2021-07-31 3:26 ` [PATCH 2/5] crypto: hisilicon/sec - delete the print of fallback tfm application failure Kai Ye
2021-08-06 8:31 ` Herbert Xu
2021-07-31 3:26 ` [PATCH 3/5] crypto: hisilicon/sec - fix the max length of AAD for the CCM mode Kai Ye
2021-08-06 8:32 ` Herbert Xu
2021-07-31 3:26 ` [PATCH 4/5] crypto: hisilicon/sec - fix the CTR mode BD configuration Kai Ye
2021-07-31 3:26 ` [PATCH 5/5] crypto: hisilicon/sec - use the correct print format Kai Ye
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).