hc
2024-01-31 f9004dbfff8a3fbbd7e2a88c8a4327c7f2f8e5b2
kernel/drivers/crypto/hisilicon/sec/sec_algs.c
....@@ -9,7 +9,7 @@
99
1010 #include <crypto/aes.h>
1111 #include <crypto/algapi.h>
12
-#include <crypto/des.h>
12
+#include <crypto/internal/des.h>
1313 #include <crypto/skcipher.h>
1414 #include <crypto/xts.h>
1515 #include <crypto/internal/skcipher.h>
....@@ -237,8 +237,8 @@
237237 memset(ctx->key, 0, SEC_MAX_CIPHER_KEY);
238238 } else {
239239 /* new key */
240
- ctx->key = dma_zalloc_coherent(dev, SEC_MAX_CIPHER_KEY,
241
- &ctx->pkey, GFP_KERNEL);
240
+ ctx->key = dma_alloc_coherent(dev, SEC_MAX_CIPHER_KEY,
241
+ &ctx->pkey, GFP_KERNEL);
242242 if (!ctx->key) {
243243 mutex_unlock(&ctx->lock);
244244 return -ENOMEM;
....@@ -343,38 +343,30 @@
343343 static int sec_alg_skcipher_setkey_des_ecb(struct crypto_skcipher *tfm,
344344 const u8 *key, unsigned int keylen)
345345 {
346
- if (keylen != DES_KEY_SIZE)
347
- return -EINVAL;
348
-
349
- return sec_alg_skcipher_setkey(tfm, key, keylen, SEC_C_DES_ECB_64);
346
+ return verify_skcipher_des_key(tfm, key) ?:
347
+ sec_alg_skcipher_setkey(tfm, key, keylen, SEC_C_DES_ECB_64);
350348 }
351349
352350 static int sec_alg_skcipher_setkey_des_cbc(struct crypto_skcipher *tfm,
353351 const u8 *key, unsigned int keylen)
354352 {
355
- if (keylen != DES_KEY_SIZE)
356
- return -EINVAL;
357
-
358
- return sec_alg_skcipher_setkey(tfm, key, keylen, SEC_C_DES_CBC_64);
353
+ return verify_skcipher_des_key(tfm, key) ?:
354
+ sec_alg_skcipher_setkey(tfm, key, keylen, SEC_C_DES_CBC_64);
359355 }
360356
361357 static int sec_alg_skcipher_setkey_3des_ecb(struct crypto_skcipher *tfm,
362358 const u8 *key, unsigned int keylen)
363359 {
364
- if (keylen != DES_KEY_SIZE * 3)
365
- return -EINVAL;
366
-
367
- return sec_alg_skcipher_setkey(tfm, key, keylen,
360
+ return verify_skcipher_des3_key(tfm, key) ?:
361
+ sec_alg_skcipher_setkey(tfm, key, keylen,
368362 SEC_C_3DES_ECB_192_3KEY);
369363 }
370364
371365 static int sec_alg_skcipher_setkey_3des_cbc(struct crypto_skcipher *tfm,
372366 const u8 *key, unsigned int keylen)
373367 {
374
- if (keylen != DES3_EDE_KEY_SIZE)
375
- return -EINVAL;
376
-
377
- return sec_alg_skcipher_setkey(tfm, key, keylen,
368
+ return verify_skcipher_des3_key(tfm, key) ?:
369
+ sec_alg_skcipher_setkey(tfm, key, keylen,
378370 SEC_C_3DES_CBC_192_3KEY);
379371 }
380372
....@@ -457,7 +449,7 @@
457449 */
458450 }
459451
460
- mutex_lock(&ctx->queue->queuelock);
452
+ spin_lock_bh(&ctx->queue->queuelock);
461453 /* Put the IV in place for chained cases */
462454 switch (ctx->cipher_alg) {
463455 case SEC_C_AES_CBC_128:
....@@ -517,7 +509,7 @@
517509 list_del(&backlog_req->backlog_head);
518510 }
519511 }
520
- mutex_unlock(&ctx->queue->queuelock);
512
+ spin_unlock_bh(&ctx->queue->queuelock);
521513
522514 mutex_lock(&sec_req->lock);
523515 list_del(&sec_req_el->head);
....@@ -806,7 +798,7 @@
806798 */
807799
808800 /* Grab a big lock for a long time to avoid concurrency issues */
809
- mutex_lock(&queue->queuelock);
801
+ spin_lock_bh(&queue->queuelock);
810802
811803 /*
812804 * Can go on to queue if we have space in either:
....@@ -822,15 +814,15 @@
822814 ret = -EBUSY;
823815 if ((skreq->base.flags & CRYPTO_TFM_REQ_MAY_BACKLOG)) {
824816 list_add_tail(&sec_req->backlog_head, &ctx->backlog);
825
- mutex_unlock(&queue->queuelock);
817
+ spin_unlock_bh(&queue->queuelock);
826818 goto out;
827819 }
828820
829
- mutex_unlock(&queue->queuelock);
821
+ spin_unlock_bh(&queue->queuelock);
830822 goto err_free_elements;
831823 }
832824 ret = sec_send_request(sec_req, queue);
833
- mutex_unlock(&queue->queuelock);
825
+ spin_unlock_bh(&queue->queuelock);
834826 if (ret)
835827 goto err_free_elements;
836828
....@@ -889,7 +881,7 @@
889881 if (IS_ERR(ctx->queue))
890882 return PTR_ERR(ctx->queue);
891883
892
- mutex_init(&ctx->queue->queuelock);
884
+ spin_lock_init(&ctx->queue->queuelock);
893885 ctx->queue->havesoftqueue = false;
894886
895887 return 0;
....@@ -942,7 +934,8 @@
942934 .cra_name = "ecb(aes)",
943935 .cra_driver_name = "hisi_sec_aes_ecb",
944936 .cra_priority = 4001,
945
- .cra_flags = CRYPTO_ALG_ASYNC,
937
+ .cra_flags = CRYPTO_ALG_ASYNC |
938
+ CRYPTO_ALG_ALLOCATES_MEMORY,
946939 .cra_blocksize = AES_BLOCK_SIZE,
947940 .cra_ctxsize = sizeof(struct sec_alg_tfm_ctx),
948941 .cra_alignmask = 0,
....@@ -961,7 +954,8 @@
961954 .cra_name = "cbc(aes)",
962955 .cra_driver_name = "hisi_sec_aes_cbc",
963956 .cra_priority = 4001,
964
- .cra_flags = CRYPTO_ALG_ASYNC,
957
+ .cra_flags = CRYPTO_ALG_ASYNC |
958
+ CRYPTO_ALG_ALLOCATES_MEMORY,
965959 .cra_blocksize = AES_BLOCK_SIZE,
966960 .cra_ctxsize = sizeof(struct sec_alg_tfm_ctx),
967961 .cra_alignmask = 0,
....@@ -980,7 +974,8 @@
980974 .cra_name = "ctr(aes)",
981975 .cra_driver_name = "hisi_sec_aes_ctr",
982976 .cra_priority = 4001,
983
- .cra_flags = CRYPTO_ALG_ASYNC,
977
+ .cra_flags = CRYPTO_ALG_ASYNC |
978
+ CRYPTO_ALG_ALLOCATES_MEMORY,
984979 .cra_blocksize = AES_BLOCK_SIZE,
985980 .cra_ctxsize = sizeof(struct sec_alg_tfm_ctx),
986981 .cra_alignmask = 0,
....@@ -999,7 +994,8 @@
999994 .cra_name = "xts(aes)",
1000995 .cra_driver_name = "hisi_sec_aes_xts",
1001996 .cra_priority = 4001,
1002
- .cra_flags = CRYPTO_ALG_ASYNC,
997
+ .cra_flags = CRYPTO_ALG_ASYNC |
998
+ CRYPTO_ALG_ALLOCATES_MEMORY,
1003999 .cra_blocksize = AES_BLOCK_SIZE,
10041000 .cra_ctxsize = sizeof(struct sec_alg_tfm_ctx),
10051001 .cra_alignmask = 0,
....@@ -1019,7 +1015,8 @@
10191015 .cra_name = "ecb(des)",
10201016 .cra_driver_name = "hisi_sec_des_ecb",
10211017 .cra_priority = 4001,
1022
- .cra_flags = CRYPTO_ALG_ASYNC,
1018
+ .cra_flags = CRYPTO_ALG_ASYNC |
1019
+ CRYPTO_ALG_ALLOCATES_MEMORY,
10231020 .cra_blocksize = DES_BLOCK_SIZE,
10241021 .cra_ctxsize = sizeof(struct sec_alg_tfm_ctx),
10251022 .cra_alignmask = 0,
....@@ -1038,7 +1035,8 @@
10381035 .cra_name = "cbc(des)",
10391036 .cra_driver_name = "hisi_sec_des_cbc",
10401037 .cra_priority = 4001,
1041
- .cra_flags = CRYPTO_ALG_ASYNC,
1038
+ .cra_flags = CRYPTO_ALG_ASYNC |
1039
+ CRYPTO_ALG_ALLOCATES_MEMORY,
10421040 .cra_blocksize = DES_BLOCK_SIZE,
10431041 .cra_ctxsize = sizeof(struct sec_alg_tfm_ctx),
10441042 .cra_alignmask = 0,
....@@ -1057,7 +1055,8 @@
10571055 .cra_name = "cbc(des3_ede)",
10581056 .cra_driver_name = "hisi_sec_3des_cbc",
10591057 .cra_priority = 4001,
1060
- .cra_flags = CRYPTO_ALG_ASYNC,
1058
+ .cra_flags = CRYPTO_ALG_ASYNC |
1059
+ CRYPTO_ALG_ALLOCATES_MEMORY,
10611060 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
10621061 .cra_ctxsize = sizeof(struct sec_alg_tfm_ctx),
10631062 .cra_alignmask = 0,
....@@ -1076,7 +1075,8 @@
10761075 .cra_name = "ecb(des3_ede)",
10771076 .cra_driver_name = "hisi_sec_3des_ecb",
10781077 .cra_priority = 4001,
1079
- .cra_flags = CRYPTO_ALG_ASYNC,
1078
+ .cra_flags = CRYPTO_ALG_ASYNC |
1079
+ CRYPTO_ALG_ALLOCATES_MEMORY,
10801080 .cra_blocksize = DES3_EDE_BLOCK_SIZE,
10811081 .cra_ctxsize = sizeof(struct sec_alg_tfm_ctx),
10821082 .cra_alignmask = 0,