1 // SPDX-License-Identifier: GPL-2.0-only 2 /* Copyright (C) 2020 Marvell. */ 3 4 #include <crypto/aes.h> 5 #include <crypto/authenc.h> 6 #include <crypto/cryptd.h> 7 #include <crypto/des.h> 8 #include <crypto/internal/aead.h> 9 #include <crypto/sha1.h> 10 #include <crypto/sha2.h> 11 #include <crypto/xts.h> 12 #include <crypto/gcm.h> 13 #include <crypto/scatterwalk.h> 14 #include <linux/rtnetlink.h> 15 #include <linux/sort.h> 16 #include <linux/module.h> 17 #include "otx2_cptvf.h" 18 #include "otx2_cptvf_algs.h" 19 #include "otx2_cpt_reqmgr.h" 20 21 /* Size of salt in AES GCM mode */ 22 #define AES_GCM_SALT_SIZE 4 23 /* Size of IV in AES GCM mode */ 24 #define AES_GCM_IV_SIZE 8 25 /* Size of ICV (Integrity Check Value) in AES GCM mode */ 26 #define AES_GCM_ICV_SIZE 16 27 /* Offset of IV in AES GCM mode */ 28 #define AES_GCM_IV_OFFSET 8 29 #define CONTROL_WORD_LEN 8 30 #define KEY2_OFFSET 48 31 #define DMA_MODE_FLAG(dma_mode) \ 32 (((dma_mode) == OTX2_CPT_DMA_MODE_SG) ? (1 << 7) : 0) 33 34 /* Truncated SHA digest size */ 35 #define SHA1_TRUNC_DIGEST_SIZE 12 36 #define SHA256_TRUNC_DIGEST_SIZE 16 37 #define SHA384_TRUNC_DIGEST_SIZE 24 38 #define SHA512_TRUNC_DIGEST_SIZE 32 39 40 static DEFINE_MUTEX(mutex); 41 static int is_crypto_registered; 42 43 struct cpt_device_desc { 44 struct pci_dev *dev; 45 int num_queues; 46 }; 47 48 struct cpt_device_table { 49 atomic_t count; 50 struct cpt_device_desc desc[OTX2_CPT_MAX_LFS_NUM]; 51 }; 52 53 static struct cpt_device_table se_devices = { 54 .count = ATOMIC_INIT(0) 55 }; 56 57 static inline int get_se_device(struct pci_dev **pdev, int *cpu_num) 58 { 59 int count; 60 61 count = atomic_read(&se_devices.count); 62 if (count < 1) 63 return -ENODEV; 64 65 *cpu_num = get_cpu(); 66 /* 67 * On OcteonTX2 platform CPT instruction queue is bound to each 68 * local function LF, in turn LFs can be attached to PF 69 * or VF therefore we always use first device. We get maximum 70 * performance if one CPT queue is available for each cpu 71 * otherwise CPT queues need to be shared between cpus. 72 */ 73 if (*cpu_num >= se_devices.desc[0].num_queues) 74 *cpu_num %= se_devices.desc[0].num_queues; 75 *pdev = se_devices.desc[0].dev; 76 77 put_cpu(); 78 79 return 0; 80 } 81 82 static inline int validate_hmac_cipher_null(struct otx2_cpt_req_info *cpt_req) 83 { 84 struct otx2_cpt_req_ctx *rctx; 85 struct aead_request *req; 86 struct crypto_aead *tfm; 87 88 req = container_of(cpt_req->areq, struct aead_request, base); 89 tfm = crypto_aead_reqtfm(req); 90 rctx = aead_request_ctx_dma(req); 91 if (memcmp(rctx->fctx.hmac.s.hmac_calc, 92 rctx->fctx.hmac.s.hmac_recv, 93 crypto_aead_authsize(tfm)) != 0) 94 return -EBADMSG; 95 96 return 0; 97 } 98 99 static void otx2_cpt_aead_callback(int status, void *arg1, void *arg2) 100 { 101 struct otx2_cpt_inst_info *inst_info = arg2; 102 struct crypto_async_request *areq = arg1; 103 struct otx2_cpt_req_info *cpt_req; 104 struct pci_dev *pdev; 105 106 if (inst_info) { 107 cpt_req = inst_info->req; 108 if (!status) { 109 /* 110 * When selected cipher is NULL we need to manually 111 * verify whether calculated hmac value matches 112 * received hmac value 113 */ 114 if (cpt_req->req_type == 115 OTX2_CPT_AEAD_ENC_DEC_NULL_REQ && 116 !cpt_req->is_enc) 117 status = validate_hmac_cipher_null(cpt_req); 118 } 119 pdev = inst_info->pdev; 120 otx2_cpt_info_destroy(pdev, inst_info); 121 } 122 if (areq) 123 crypto_request_complete(areq, status); 124 } 125 126 static void output_iv_copyback(struct crypto_async_request *areq) 127 { 128 struct otx2_cpt_req_info *req_info; 129 struct otx2_cpt_req_ctx *rctx; 130 struct skcipher_request *sreq; 131 struct crypto_skcipher *stfm; 132 struct otx2_cpt_enc_ctx *ctx; 133 u32 start, ivsize; 134 135 sreq = container_of(areq, struct skcipher_request, base); 136 stfm = crypto_skcipher_reqtfm(sreq); 137 ctx = crypto_skcipher_ctx(stfm); 138 if (ctx->cipher_type == OTX2_CPT_AES_CBC || 139 ctx->cipher_type == OTX2_CPT_DES3_CBC) { 140 rctx = skcipher_request_ctx_dma(sreq); 141 req_info = &rctx->cpt_req; 142 ivsize = crypto_skcipher_ivsize(stfm); 143 start = sreq->cryptlen - ivsize; 144 145 if (req_info->is_enc) { 146 scatterwalk_map_and_copy(sreq->iv, sreq->dst, start, 147 ivsize, 0); 148 } else { 149 if (sreq->src != sreq->dst) { 150 scatterwalk_map_and_copy(sreq->iv, sreq->src, 151 start, ivsize, 0); 152 } else { 153 memcpy(sreq->iv, req_info->iv_out, ivsize); 154 kfree(req_info->iv_out); 155 } 156 } 157 } 158 } 159 160 static void otx2_cpt_skcipher_callback(int status, void *arg1, void *arg2) 161 { 162 struct otx2_cpt_inst_info *inst_info = arg2; 163 struct crypto_async_request *areq = arg1; 164 struct pci_dev *pdev; 165 166 if (areq) { 167 if (!status) 168 output_iv_copyback(areq); 169 if (inst_info) { 170 pdev = inst_info->pdev; 171 otx2_cpt_info_destroy(pdev, inst_info); 172 } 173 crypto_request_complete(areq, status); 174 } 175 } 176 177 static inline void update_input_data(struct otx2_cpt_req_info *req_info, 178 struct scatterlist *inp_sg, 179 u32 nbytes, u32 *argcnt) 180 { 181 req_info->req.dlen += nbytes; 182 183 while (nbytes) { 184 u32 len = (nbytes < inp_sg->length) ? nbytes : inp_sg->length; 185 u8 *ptr = sg_virt(inp_sg); 186 187 req_info->in[*argcnt].vptr = (void *)ptr; 188 req_info->in[*argcnt].size = len; 189 nbytes -= len; 190 ++(*argcnt); 191 inp_sg = sg_next(inp_sg); 192 } 193 } 194 195 static inline void update_output_data(struct otx2_cpt_req_info *req_info, 196 struct scatterlist *outp_sg, 197 u32 offset, u32 nbytes, u32 *argcnt) 198 { 199 u32 len, sg_len; 200 u8 *ptr; 201 202 req_info->rlen += nbytes; 203 204 while (nbytes) { 205 sg_len = outp_sg->length - offset; 206 len = (nbytes < sg_len) ? nbytes : sg_len; 207 ptr = sg_virt(outp_sg); 208 209 req_info->out[*argcnt].vptr = (void *) (ptr + offset); 210 req_info->out[*argcnt].size = len; 211 nbytes -= len; 212 ++(*argcnt); 213 offset = 0; 214 outp_sg = sg_next(outp_sg); 215 } 216 } 217 218 static inline int create_ctx_hdr(struct skcipher_request *req, u32 enc, 219 u32 *argcnt) 220 { 221 struct crypto_skcipher *stfm = crypto_skcipher_reqtfm(req); 222 struct otx2_cpt_req_ctx *rctx = skcipher_request_ctx_dma(req); 223 struct otx2_cpt_enc_ctx *ctx = crypto_skcipher_ctx(stfm); 224 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 225 struct otx2_cpt_fc_ctx *fctx = &rctx->fctx; 226 int ivsize = crypto_skcipher_ivsize(stfm); 227 u32 start = req->cryptlen - ivsize; 228 gfp_t flags; 229 230 flags = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ? 231 GFP_KERNEL : GFP_ATOMIC; 232 req_info->ctrl.s.dma_mode = OTX2_CPT_DMA_MODE_SG; 233 req_info->ctrl.s.se_req = 1; 234 235 req_info->req.opcode.s.major = OTX2_CPT_MAJOR_OP_FC | 236 DMA_MODE_FLAG(OTX2_CPT_DMA_MODE_SG); 237 if (enc) { 238 req_info->req.opcode.s.minor = 2; 239 } else { 240 req_info->req.opcode.s.minor = 3; 241 if ((ctx->cipher_type == OTX2_CPT_AES_CBC || 242 ctx->cipher_type == OTX2_CPT_DES3_CBC) && 243 req->src == req->dst) { 244 req_info->iv_out = kmalloc(ivsize, flags); 245 if (!req_info->iv_out) 246 return -ENOMEM; 247 248 scatterwalk_map_and_copy(req_info->iv_out, req->src, 249 start, ivsize, 0); 250 } 251 } 252 /* Encryption data length */ 253 req_info->req.param1 = req->cryptlen; 254 /* Authentication data length */ 255 req_info->req.param2 = 0; 256 257 fctx->enc.enc_ctrl.e.enc_cipher = ctx->cipher_type; 258 fctx->enc.enc_ctrl.e.aes_key = ctx->key_type; 259 fctx->enc.enc_ctrl.e.iv_source = OTX2_CPT_FROM_CPTR; 260 261 if (ctx->cipher_type == OTX2_CPT_AES_XTS) 262 memcpy(fctx->enc.encr_key, ctx->enc_key, ctx->key_len * 2); 263 else 264 memcpy(fctx->enc.encr_key, ctx->enc_key, ctx->key_len); 265 266 memcpy(fctx->enc.encr_iv, req->iv, crypto_skcipher_ivsize(stfm)); 267 268 cpu_to_be64s(&fctx->enc.enc_ctrl.u); 269 270 /* 271 * Storing Packet Data Information in offset 272 * Control Word First 8 bytes 273 */ 274 req_info->in[*argcnt].vptr = (u8 *)&rctx->ctrl_word; 275 req_info->in[*argcnt].size = CONTROL_WORD_LEN; 276 req_info->req.dlen += CONTROL_WORD_LEN; 277 ++(*argcnt); 278 279 req_info->in[*argcnt].vptr = (u8 *)fctx; 280 req_info->in[*argcnt].size = sizeof(struct otx2_cpt_fc_ctx); 281 req_info->req.dlen += sizeof(struct otx2_cpt_fc_ctx); 282 283 ++(*argcnt); 284 285 return 0; 286 } 287 288 static inline int create_input_list(struct skcipher_request *req, u32 enc, 289 u32 enc_iv_len) 290 { 291 struct otx2_cpt_req_ctx *rctx = skcipher_request_ctx_dma(req); 292 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 293 u32 argcnt = 0; 294 int ret; 295 296 ret = create_ctx_hdr(req, enc, &argcnt); 297 if (ret) 298 return ret; 299 300 update_input_data(req_info, req->src, req->cryptlen, &argcnt); 301 req_info->in_cnt = argcnt; 302 303 return 0; 304 } 305 306 static inline void create_output_list(struct skcipher_request *req, 307 u32 enc_iv_len) 308 { 309 struct otx2_cpt_req_ctx *rctx = skcipher_request_ctx_dma(req); 310 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 311 u32 argcnt = 0; 312 313 /* 314 * OUTPUT Buffer Processing 315 * AES encryption/decryption output would be 316 * received in the following format 317 * 318 * ------IV--------|------ENCRYPTED/DECRYPTED DATA-----| 319 * [ 16 Bytes/ [ Request Enc/Dec/ DATA Len AES CBC ] 320 */ 321 update_output_data(req_info, req->dst, 0, req->cryptlen, &argcnt); 322 req_info->out_cnt = argcnt; 323 } 324 325 static int skcipher_do_fallback(struct skcipher_request *req, bool is_enc) 326 { 327 struct crypto_skcipher *stfm = crypto_skcipher_reqtfm(req); 328 struct otx2_cpt_req_ctx *rctx = skcipher_request_ctx_dma(req); 329 struct otx2_cpt_enc_ctx *ctx = crypto_skcipher_ctx(stfm); 330 int ret; 331 332 if (ctx->fbk_cipher) { 333 skcipher_request_set_tfm(&rctx->sk_fbk_req, ctx->fbk_cipher); 334 skcipher_request_set_callback(&rctx->sk_fbk_req, 335 req->base.flags, 336 req->base.complete, 337 req->base.data); 338 skcipher_request_set_crypt(&rctx->sk_fbk_req, req->src, 339 req->dst, req->cryptlen, req->iv); 340 ret = is_enc ? crypto_skcipher_encrypt(&rctx->sk_fbk_req) : 341 crypto_skcipher_decrypt(&rctx->sk_fbk_req); 342 } else { 343 ret = -EINVAL; 344 } 345 return ret; 346 } 347 348 static inline int cpt_enc_dec(struct skcipher_request *req, u32 enc) 349 { 350 struct crypto_skcipher *stfm = crypto_skcipher_reqtfm(req); 351 struct otx2_cpt_req_ctx *rctx = skcipher_request_ctx_dma(req); 352 struct otx2_cpt_enc_ctx *ctx = crypto_skcipher_ctx(stfm); 353 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 354 u32 enc_iv_len = crypto_skcipher_ivsize(stfm); 355 struct pci_dev *pdev; 356 int status, cpu_num; 357 358 if (req->cryptlen == 0) 359 return 0; 360 361 if (!IS_ALIGNED(req->cryptlen, ctx->enc_align_len)) 362 return -EINVAL; 363 364 if (req->cryptlen > OTX2_CPT_MAX_REQ_SIZE) 365 return skcipher_do_fallback(req, enc); 366 367 /* Clear control words */ 368 rctx->ctrl_word.flags = 0; 369 rctx->fctx.enc.enc_ctrl.u = 0; 370 371 status = create_input_list(req, enc, enc_iv_len); 372 if (status) 373 return status; 374 create_output_list(req, enc_iv_len); 375 376 status = get_se_device(&pdev, &cpu_num); 377 if (status) 378 return status; 379 380 req_info->callback = otx2_cpt_skcipher_callback; 381 req_info->areq = &req->base; 382 req_info->req_type = OTX2_CPT_ENC_DEC_REQ; 383 req_info->is_enc = enc; 384 req_info->is_trunc_hmac = false; 385 req_info->ctrl.s.grp = otx2_cpt_get_kcrypto_eng_grp_num(pdev); 386 387 /* 388 * We perform an asynchronous send and once 389 * the request is completed the driver would 390 * intimate through registered call back functions 391 */ 392 status = otx2_cpt_do_request(pdev, req_info, cpu_num); 393 394 return status; 395 } 396 397 static int otx2_cpt_skcipher_encrypt(struct skcipher_request *req) 398 { 399 return cpt_enc_dec(req, true); 400 } 401 402 static int otx2_cpt_skcipher_decrypt(struct skcipher_request *req) 403 { 404 return cpt_enc_dec(req, false); 405 } 406 407 static int otx2_cpt_skcipher_xts_setkey(struct crypto_skcipher *tfm, 408 const u8 *key, u32 keylen) 409 { 410 struct otx2_cpt_enc_ctx *ctx = crypto_skcipher_ctx(tfm); 411 const u8 *key2 = key + (keylen / 2); 412 const u8 *key1 = key; 413 int ret; 414 415 ret = xts_verify_key(tfm, key, keylen); 416 if (ret) 417 return ret; 418 ctx->key_len = keylen; 419 ctx->enc_align_len = 1; 420 memcpy(ctx->enc_key, key1, keylen / 2); 421 memcpy(ctx->enc_key + KEY2_OFFSET, key2, keylen / 2); 422 ctx->cipher_type = OTX2_CPT_AES_XTS; 423 switch (ctx->key_len) { 424 case 2 * AES_KEYSIZE_128: 425 ctx->key_type = OTX2_CPT_AES_128_BIT; 426 break; 427 case 2 * AES_KEYSIZE_192: 428 ctx->key_type = OTX2_CPT_AES_192_BIT; 429 break; 430 case 2 * AES_KEYSIZE_256: 431 ctx->key_type = OTX2_CPT_AES_256_BIT; 432 break; 433 default: 434 return -EINVAL; 435 } 436 return crypto_skcipher_setkey(ctx->fbk_cipher, key, keylen); 437 } 438 439 static int cpt_des_setkey(struct crypto_skcipher *tfm, const u8 *key, 440 u32 keylen, u8 cipher_type) 441 { 442 struct otx2_cpt_enc_ctx *ctx = crypto_skcipher_ctx(tfm); 443 444 if (keylen != DES3_EDE_KEY_SIZE) 445 return -EINVAL; 446 447 ctx->key_len = keylen; 448 ctx->cipher_type = cipher_type; 449 ctx->enc_align_len = 8; 450 451 memcpy(ctx->enc_key, key, keylen); 452 453 return crypto_skcipher_setkey(ctx->fbk_cipher, key, keylen); 454 } 455 456 static int cpt_aes_setkey(struct crypto_skcipher *tfm, const u8 *key, 457 u32 keylen, u8 cipher_type) 458 { 459 struct otx2_cpt_enc_ctx *ctx = crypto_skcipher_ctx(tfm); 460 461 switch (keylen) { 462 case AES_KEYSIZE_128: 463 ctx->key_type = OTX2_CPT_AES_128_BIT; 464 break; 465 case AES_KEYSIZE_192: 466 ctx->key_type = OTX2_CPT_AES_192_BIT; 467 break; 468 case AES_KEYSIZE_256: 469 ctx->key_type = OTX2_CPT_AES_256_BIT; 470 break; 471 default: 472 return -EINVAL; 473 } 474 if (cipher_type == OTX2_CPT_AES_CBC || cipher_type == OTX2_CPT_AES_ECB) 475 ctx->enc_align_len = 16; 476 else 477 ctx->enc_align_len = 1; 478 479 ctx->key_len = keylen; 480 ctx->cipher_type = cipher_type; 481 482 memcpy(ctx->enc_key, key, keylen); 483 484 return crypto_skcipher_setkey(ctx->fbk_cipher, key, keylen); 485 } 486 487 static int otx2_cpt_skcipher_cbc_aes_setkey(struct crypto_skcipher *tfm, 488 const u8 *key, u32 keylen) 489 { 490 return cpt_aes_setkey(tfm, key, keylen, OTX2_CPT_AES_CBC); 491 } 492 493 static int otx2_cpt_skcipher_ecb_aes_setkey(struct crypto_skcipher *tfm, 494 const u8 *key, u32 keylen) 495 { 496 return cpt_aes_setkey(tfm, key, keylen, OTX2_CPT_AES_ECB); 497 } 498 499 static int otx2_cpt_skcipher_cbc_des3_setkey(struct crypto_skcipher *tfm, 500 const u8 *key, u32 keylen) 501 { 502 return cpt_des_setkey(tfm, key, keylen, OTX2_CPT_DES3_CBC); 503 } 504 505 static int otx2_cpt_skcipher_ecb_des3_setkey(struct crypto_skcipher *tfm, 506 const u8 *key, u32 keylen) 507 { 508 return cpt_des_setkey(tfm, key, keylen, OTX2_CPT_DES3_ECB); 509 } 510 511 static int cpt_skcipher_fallback_init(struct otx2_cpt_enc_ctx *ctx, 512 struct crypto_alg *alg) 513 { 514 if (alg->cra_flags & CRYPTO_ALG_NEED_FALLBACK) { 515 ctx->fbk_cipher = 516 crypto_alloc_skcipher(alg->cra_name, 0, 517 CRYPTO_ALG_ASYNC | 518 CRYPTO_ALG_NEED_FALLBACK); 519 if (IS_ERR(ctx->fbk_cipher)) { 520 pr_err("%s() failed to allocate fallback for %s\n", 521 __func__, alg->cra_name); 522 return PTR_ERR(ctx->fbk_cipher); 523 } 524 } 525 return 0; 526 } 527 528 static int otx2_cpt_enc_dec_init(struct crypto_skcipher *stfm) 529 { 530 struct otx2_cpt_enc_ctx *ctx = crypto_skcipher_ctx(stfm); 531 struct crypto_tfm *tfm = crypto_skcipher_tfm(stfm); 532 struct crypto_alg *alg = tfm->__crt_alg; 533 534 memset(ctx, 0, sizeof(*ctx)); 535 /* 536 * Additional memory for skcipher_request is 537 * allocated since the cryptd daemon uses 538 * this memory for request_ctx information 539 */ 540 crypto_skcipher_set_reqsize_dma( 541 stfm, sizeof(struct otx2_cpt_req_ctx) + 542 sizeof(struct skcipher_request)); 543 544 return cpt_skcipher_fallback_init(ctx, alg); 545 } 546 547 static void otx2_cpt_skcipher_exit(struct crypto_skcipher *tfm) 548 { 549 struct otx2_cpt_enc_ctx *ctx = crypto_skcipher_ctx(tfm); 550 551 if (ctx->fbk_cipher) { 552 crypto_free_skcipher(ctx->fbk_cipher); 553 ctx->fbk_cipher = NULL; 554 } 555 } 556 557 static int cpt_aead_fallback_init(struct otx2_cpt_aead_ctx *ctx, 558 struct crypto_alg *alg) 559 { 560 if (alg->cra_flags & CRYPTO_ALG_NEED_FALLBACK) { 561 ctx->fbk_cipher = 562 crypto_alloc_aead(alg->cra_name, 0, 563 CRYPTO_ALG_ASYNC | 564 CRYPTO_ALG_NEED_FALLBACK); 565 if (IS_ERR(ctx->fbk_cipher)) { 566 pr_err("%s() failed to allocate fallback for %s\n", 567 __func__, alg->cra_name); 568 return PTR_ERR(ctx->fbk_cipher); 569 } 570 } 571 return 0; 572 } 573 574 static int cpt_aead_init(struct crypto_aead *atfm, u8 cipher_type, u8 mac_type) 575 { 576 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(atfm); 577 struct crypto_tfm *tfm = crypto_aead_tfm(atfm); 578 struct crypto_alg *alg = tfm->__crt_alg; 579 580 ctx->cipher_type = cipher_type; 581 ctx->mac_type = mac_type; 582 583 /* 584 * When selected cipher is NULL we use HMAC opcode instead of 585 * FLEXICRYPTO opcode therefore we don't need to use HASH algorithms 586 * for calculating ipad and opad 587 */ 588 if (ctx->cipher_type != OTX2_CPT_CIPHER_NULL) { 589 switch (ctx->mac_type) { 590 case OTX2_CPT_SHA1: 591 ctx->hashalg = crypto_alloc_shash("sha1", 0, 592 CRYPTO_ALG_ASYNC); 593 if (IS_ERR(ctx->hashalg)) 594 return PTR_ERR(ctx->hashalg); 595 break; 596 597 case OTX2_CPT_SHA256: 598 ctx->hashalg = crypto_alloc_shash("sha256", 0, 599 CRYPTO_ALG_ASYNC); 600 if (IS_ERR(ctx->hashalg)) 601 return PTR_ERR(ctx->hashalg); 602 break; 603 604 case OTX2_CPT_SHA384: 605 ctx->hashalg = crypto_alloc_shash("sha384", 0, 606 CRYPTO_ALG_ASYNC); 607 if (IS_ERR(ctx->hashalg)) 608 return PTR_ERR(ctx->hashalg); 609 break; 610 611 case OTX2_CPT_SHA512: 612 ctx->hashalg = crypto_alloc_shash("sha512", 0, 613 CRYPTO_ALG_ASYNC); 614 if (IS_ERR(ctx->hashalg)) 615 return PTR_ERR(ctx->hashalg); 616 break; 617 } 618 } 619 switch (ctx->cipher_type) { 620 case OTX2_CPT_AES_CBC: 621 case OTX2_CPT_AES_ECB: 622 ctx->enc_align_len = 16; 623 break; 624 case OTX2_CPT_DES3_CBC: 625 case OTX2_CPT_DES3_ECB: 626 ctx->enc_align_len = 8; 627 break; 628 case OTX2_CPT_AES_GCM: 629 case OTX2_CPT_CIPHER_NULL: 630 ctx->enc_align_len = 1; 631 break; 632 } 633 crypto_aead_set_reqsize_dma(atfm, sizeof(struct otx2_cpt_req_ctx)); 634 635 return cpt_aead_fallback_init(ctx, alg); 636 } 637 638 static int otx2_cpt_aead_cbc_aes_sha1_init(struct crypto_aead *tfm) 639 { 640 return cpt_aead_init(tfm, OTX2_CPT_AES_CBC, OTX2_CPT_SHA1); 641 } 642 643 static int otx2_cpt_aead_cbc_aes_sha256_init(struct crypto_aead *tfm) 644 { 645 return cpt_aead_init(tfm, OTX2_CPT_AES_CBC, OTX2_CPT_SHA256); 646 } 647 648 static int otx2_cpt_aead_cbc_aes_sha384_init(struct crypto_aead *tfm) 649 { 650 return cpt_aead_init(tfm, OTX2_CPT_AES_CBC, OTX2_CPT_SHA384); 651 } 652 653 static int otx2_cpt_aead_cbc_aes_sha512_init(struct crypto_aead *tfm) 654 { 655 return cpt_aead_init(tfm, OTX2_CPT_AES_CBC, OTX2_CPT_SHA512); 656 } 657 658 static int otx2_cpt_aead_ecb_null_sha1_init(struct crypto_aead *tfm) 659 { 660 return cpt_aead_init(tfm, OTX2_CPT_CIPHER_NULL, OTX2_CPT_SHA1); 661 } 662 663 static int otx2_cpt_aead_ecb_null_sha256_init(struct crypto_aead *tfm) 664 { 665 return cpt_aead_init(tfm, OTX2_CPT_CIPHER_NULL, OTX2_CPT_SHA256); 666 } 667 668 static int otx2_cpt_aead_ecb_null_sha384_init(struct crypto_aead *tfm) 669 { 670 return cpt_aead_init(tfm, OTX2_CPT_CIPHER_NULL, OTX2_CPT_SHA384); 671 } 672 673 static int otx2_cpt_aead_ecb_null_sha512_init(struct crypto_aead *tfm) 674 { 675 return cpt_aead_init(tfm, OTX2_CPT_CIPHER_NULL, OTX2_CPT_SHA512); 676 } 677 678 static int otx2_cpt_aead_gcm_aes_init(struct crypto_aead *tfm) 679 { 680 return cpt_aead_init(tfm, OTX2_CPT_AES_GCM, OTX2_CPT_MAC_NULL); 681 } 682 683 static void otx2_cpt_aead_exit(struct crypto_aead *tfm) 684 { 685 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(tfm); 686 687 kfree(ctx->ipad); 688 kfree(ctx->opad); 689 if (ctx->hashalg) 690 crypto_free_shash(ctx->hashalg); 691 kfree(ctx->sdesc); 692 693 if (ctx->fbk_cipher) { 694 crypto_free_aead(ctx->fbk_cipher); 695 ctx->fbk_cipher = NULL; 696 } 697 } 698 699 static int otx2_cpt_aead_gcm_set_authsize(struct crypto_aead *tfm, 700 unsigned int authsize) 701 { 702 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(tfm); 703 704 if (crypto_rfc4106_check_authsize(authsize)) 705 return -EINVAL; 706 707 tfm->authsize = authsize; 708 /* Set authsize for fallback case */ 709 if (ctx->fbk_cipher) 710 ctx->fbk_cipher->authsize = authsize; 711 712 return 0; 713 } 714 715 static int otx2_cpt_aead_set_authsize(struct crypto_aead *tfm, 716 unsigned int authsize) 717 { 718 tfm->authsize = authsize; 719 720 return 0; 721 } 722 723 static int otx2_cpt_aead_null_set_authsize(struct crypto_aead *tfm, 724 unsigned int authsize) 725 { 726 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(tfm); 727 728 ctx->is_trunc_hmac = true; 729 tfm->authsize = authsize; 730 731 return 0; 732 } 733 734 static struct otx2_cpt_sdesc *alloc_sdesc(struct crypto_shash *alg) 735 { 736 struct otx2_cpt_sdesc *sdesc; 737 int size; 738 739 size = sizeof(struct shash_desc) + crypto_shash_descsize(alg); 740 sdesc = kmalloc(size, GFP_KERNEL); 741 if (!sdesc) 742 return NULL; 743 744 sdesc->shash.tfm = alg; 745 746 return sdesc; 747 } 748 749 static inline void swap_data32(void *buf, u32 len) 750 { 751 cpu_to_be32_array(buf, buf, len / 4); 752 } 753 754 static inline void swap_data64(void *buf, u32 len) 755 { 756 u64 *src = buf; 757 int i = 0; 758 759 for (i = 0 ; i < len / 8; i++, src++) 760 cpu_to_be64s(src); 761 } 762 763 static int copy_pad(u8 mac_type, u8 *out_pad, u8 *in_pad) 764 { 765 struct sha512_state *sha512; 766 struct sha256_state *sha256; 767 struct sha1_state *sha1; 768 769 switch (mac_type) { 770 case OTX2_CPT_SHA1: 771 sha1 = (struct sha1_state *) in_pad; 772 swap_data32(sha1->state, SHA1_DIGEST_SIZE); 773 memcpy(out_pad, &sha1->state, SHA1_DIGEST_SIZE); 774 break; 775 776 case OTX2_CPT_SHA256: 777 sha256 = (struct sha256_state *) in_pad; 778 swap_data32(sha256->state, SHA256_DIGEST_SIZE); 779 memcpy(out_pad, &sha256->state, SHA256_DIGEST_SIZE); 780 break; 781 782 case OTX2_CPT_SHA384: 783 case OTX2_CPT_SHA512: 784 sha512 = (struct sha512_state *) in_pad; 785 swap_data64(sha512->state, SHA512_DIGEST_SIZE); 786 memcpy(out_pad, &sha512->state, SHA512_DIGEST_SIZE); 787 break; 788 789 default: 790 return -EINVAL; 791 } 792 793 return 0; 794 } 795 796 static int aead_hmac_init(struct crypto_aead *cipher) 797 { 798 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); 799 int state_size = crypto_shash_statesize(ctx->hashalg); 800 int ds = crypto_shash_digestsize(ctx->hashalg); 801 int bs = crypto_shash_blocksize(ctx->hashalg); 802 int authkeylen = ctx->auth_key_len; 803 u8 *ipad = NULL, *opad = NULL; 804 int ret = 0, icount = 0; 805 806 ctx->sdesc = alloc_sdesc(ctx->hashalg); 807 if (!ctx->sdesc) 808 return -ENOMEM; 809 810 ctx->ipad = kzalloc(bs, GFP_KERNEL); 811 if (!ctx->ipad) { 812 ret = -ENOMEM; 813 goto calc_fail; 814 } 815 816 ctx->opad = kzalloc(bs, GFP_KERNEL); 817 if (!ctx->opad) { 818 ret = -ENOMEM; 819 goto calc_fail; 820 } 821 822 ipad = kzalloc(state_size, GFP_KERNEL); 823 if (!ipad) { 824 ret = -ENOMEM; 825 goto calc_fail; 826 } 827 828 opad = kzalloc(state_size, GFP_KERNEL); 829 if (!opad) { 830 ret = -ENOMEM; 831 goto calc_fail; 832 } 833 834 if (authkeylen > bs) { 835 ret = crypto_shash_digest(&ctx->sdesc->shash, ctx->key, 836 authkeylen, ipad); 837 if (ret) 838 goto calc_fail; 839 840 authkeylen = ds; 841 } else { 842 memcpy(ipad, ctx->key, authkeylen); 843 } 844 845 memset(ipad + authkeylen, 0, bs - authkeylen); 846 memcpy(opad, ipad, bs); 847 848 for (icount = 0; icount < bs; icount++) { 849 ipad[icount] ^= 0x36; 850 opad[icount] ^= 0x5c; 851 } 852 853 /* 854 * Partial Hash calculated from the software 855 * algorithm is retrieved for IPAD & OPAD 856 */ 857 858 /* IPAD Calculation */ 859 crypto_shash_init(&ctx->sdesc->shash); 860 crypto_shash_update(&ctx->sdesc->shash, ipad, bs); 861 crypto_shash_export(&ctx->sdesc->shash, ipad); 862 ret = copy_pad(ctx->mac_type, ctx->ipad, ipad); 863 if (ret) 864 goto calc_fail; 865 866 /* OPAD Calculation */ 867 crypto_shash_init(&ctx->sdesc->shash); 868 crypto_shash_update(&ctx->sdesc->shash, opad, bs); 869 crypto_shash_export(&ctx->sdesc->shash, opad); 870 ret = copy_pad(ctx->mac_type, ctx->opad, opad); 871 if (ret) 872 goto calc_fail; 873 874 kfree(ipad); 875 kfree(opad); 876 877 return 0; 878 879 calc_fail: 880 kfree(ctx->ipad); 881 ctx->ipad = NULL; 882 kfree(ctx->opad); 883 ctx->opad = NULL; 884 kfree(ipad); 885 kfree(opad); 886 kfree(ctx->sdesc); 887 ctx->sdesc = NULL; 888 889 return ret; 890 } 891 892 static int otx2_cpt_aead_cbc_aes_sha_setkey(struct crypto_aead *cipher, 893 const unsigned char *key, 894 unsigned int keylen) 895 { 896 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); 897 struct crypto_authenc_key_param *param; 898 int enckeylen = 0, authkeylen = 0; 899 struct rtattr *rta = (void *)key; 900 901 if (!RTA_OK(rta, keylen)) 902 return -EINVAL; 903 904 if (rta->rta_type != CRYPTO_AUTHENC_KEYA_PARAM) 905 return -EINVAL; 906 907 if (RTA_PAYLOAD(rta) < sizeof(*param)) 908 return -EINVAL; 909 910 param = RTA_DATA(rta); 911 enckeylen = be32_to_cpu(param->enckeylen); 912 key += RTA_ALIGN(rta->rta_len); 913 keylen -= RTA_ALIGN(rta->rta_len); 914 if (keylen < enckeylen) 915 return -EINVAL; 916 917 if (keylen > OTX2_CPT_MAX_KEY_SIZE) 918 return -EINVAL; 919 920 authkeylen = keylen - enckeylen; 921 memcpy(ctx->key, key, keylen); 922 923 switch (enckeylen) { 924 case AES_KEYSIZE_128: 925 ctx->key_type = OTX2_CPT_AES_128_BIT; 926 break; 927 case AES_KEYSIZE_192: 928 ctx->key_type = OTX2_CPT_AES_192_BIT; 929 break; 930 case AES_KEYSIZE_256: 931 ctx->key_type = OTX2_CPT_AES_256_BIT; 932 break; 933 default: 934 /* Invalid key length */ 935 return -EINVAL; 936 } 937 938 ctx->enc_key_len = enckeylen; 939 ctx->auth_key_len = authkeylen; 940 941 return aead_hmac_init(cipher); 942 } 943 944 static int otx2_cpt_aead_ecb_null_sha_setkey(struct crypto_aead *cipher, 945 const unsigned char *key, 946 unsigned int keylen) 947 { 948 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); 949 struct crypto_authenc_key_param *param; 950 struct rtattr *rta = (void *)key; 951 int enckeylen = 0; 952 953 if (!RTA_OK(rta, keylen)) 954 return -EINVAL; 955 956 if (rta->rta_type != CRYPTO_AUTHENC_KEYA_PARAM) 957 return -EINVAL; 958 959 if (RTA_PAYLOAD(rta) < sizeof(*param)) 960 return -EINVAL; 961 962 param = RTA_DATA(rta); 963 enckeylen = be32_to_cpu(param->enckeylen); 964 key += RTA_ALIGN(rta->rta_len); 965 keylen -= RTA_ALIGN(rta->rta_len); 966 if (enckeylen != 0) 967 return -EINVAL; 968 969 if (keylen > OTX2_CPT_MAX_KEY_SIZE) 970 return -EINVAL; 971 972 memcpy(ctx->key, key, keylen); 973 ctx->enc_key_len = enckeylen; 974 ctx->auth_key_len = keylen; 975 976 return 0; 977 } 978 979 static int otx2_cpt_aead_gcm_aes_setkey(struct crypto_aead *cipher, 980 const unsigned char *key, 981 unsigned int keylen) 982 { 983 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(cipher); 984 985 /* 986 * For aes gcm we expect to get encryption key (16, 24, 32 bytes) 987 * and salt (4 bytes) 988 */ 989 switch (keylen) { 990 case AES_KEYSIZE_128 + AES_GCM_SALT_SIZE: 991 ctx->key_type = OTX2_CPT_AES_128_BIT; 992 ctx->enc_key_len = AES_KEYSIZE_128; 993 break; 994 case AES_KEYSIZE_192 + AES_GCM_SALT_SIZE: 995 ctx->key_type = OTX2_CPT_AES_192_BIT; 996 ctx->enc_key_len = AES_KEYSIZE_192; 997 break; 998 case AES_KEYSIZE_256 + AES_GCM_SALT_SIZE: 999 ctx->key_type = OTX2_CPT_AES_256_BIT; 1000 ctx->enc_key_len = AES_KEYSIZE_256; 1001 break; 1002 default: 1003 /* Invalid key and salt length */ 1004 return -EINVAL; 1005 } 1006 1007 /* Store encryption key and salt */ 1008 memcpy(ctx->key, key, keylen); 1009 1010 return crypto_aead_setkey(ctx->fbk_cipher, key, keylen); 1011 } 1012 1013 static inline int create_aead_ctx_hdr(struct aead_request *req, u32 enc, 1014 u32 *argcnt) 1015 { 1016 struct otx2_cpt_req_ctx *rctx = aead_request_ctx_dma(req); 1017 struct crypto_aead *tfm = crypto_aead_reqtfm(req); 1018 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(tfm); 1019 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 1020 struct otx2_cpt_fc_ctx *fctx = &rctx->fctx; 1021 int mac_len = crypto_aead_authsize(tfm); 1022 int ds; 1023 1024 rctx->ctrl_word.e.enc_data_offset = req->assoclen; 1025 1026 switch (ctx->cipher_type) { 1027 case OTX2_CPT_AES_CBC: 1028 if (req->assoclen > 248 || !IS_ALIGNED(req->assoclen, 8)) 1029 return -EINVAL; 1030 1031 fctx->enc.enc_ctrl.e.iv_source = OTX2_CPT_FROM_CPTR; 1032 /* Copy encryption key to context */ 1033 memcpy(fctx->enc.encr_key, ctx->key + ctx->auth_key_len, 1034 ctx->enc_key_len); 1035 /* Copy IV to context */ 1036 memcpy(fctx->enc.encr_iv, req->iv, crypto_aead_ivsize(tfm)); 1037 1038 ds = crypto_shash_digestsize(ctx->hashalg); 1039 if (ctx->mac_type == OTX2_CPT_SHA384) 1040 ds = SHA512_DIGEST_SIZE; 1041 if (ctx->ipad) 1042 memcpy(fctx->hmac.e.ipad, ctx->ipad, ds); 1043 if (ctx->opad) 1044 memcpy(fctx->hmac.e.opad, ctx->opad, ds); 1045 break; 1046 1047 case OTX2_CPT_AES_GCM: 1048 if (crypto_ipsec_check_assoclen(req->assoclen)) 1049 return -EINVAL; 1050 1051 fctx->enc.enc_ctrl.e.iv_source = OTX2_CPT_FROM_DPTR; 1052 /* Copy encryption key to context */ 1053 memcpy(fctx->enc.encr_key, ctx->key, ctx->enc_key_len); 1054 /* Copy salt to context */ 1055 memcpy(fctx->enc.encr_iv, ctx->key + ctx->enc_key_len, 1056 AES_GCM_SALT_SIZE); 1057 1058 rctx->ctrl_word.e.iv_offset = req->assoclen - AES_GCM_IV_OFFSET; 1059 break; 1060 1061 default: 1062 /* Unknown cipher type */ 1063 return -EINVAL; 1064 } 1065 cpu_to_be64s(&rctx->ctrl_word.flags); 1066 1067 req_info->ctrl.s.dma_mode = OTX2_CPT_DMA_MODE_SG; 1068 req_info->ctrl.s.se_req = 1; 1069 req_info->req.opcode.s.major = OTX2_CPT_MAJOR_OP_FC | 1070 DMA_MODE_FLAG(OTX2_CPT_DMA_MODE_SG); 1071 if (enc) { 1072 req_info->req.opcode.s.minor = 2; 1073 req_info->req.param1 = req->cryptlen; 1074 req_info->req.param2 = req->cryptlen + req->assoclen; 1075 } else { 1076 req_info->req.opcode.s.minor = 3; 1077 req_info->req.param1 = req->cryptlen - mac_len; 1078 req_info->req.param2 = req->cryptlen + req->assoclen - mac_len; 1079 } 1080 1081 fctx->enc.enc_ctrl.e.enc_cipher = ctx->cipher_type; 1082 fctx->enc.enc_ctrl.e.aes_key = ctx->key_type; 1083 fctx->enc.enc_ctrl.e.mac_type = ctx->mac_type; 1084 fctx->enc.enc_ctrl.e.mac_len = mac_len; 1085 cpu_to_be64s(&fctx->enc.enc_ctrl.u); 1086 1087 /* 1088 * Storing Packet Data Information in offset 1089 * Control Word First 8 bytes 1090 */ 1091 req_info->in[*argcnt].vptr = (u8 *)&rctx->ctrl_word; 1092 req_info->in[*argcnt].size = CONTROL_WORD_LEN; 1093 req_info->req.dlen += CONTROL_WORD_LEN; 1094 ++(*argcnt); 1095 1096 req_info->in[*argcnt].vptr = (u8 *)fctx; 1097 req_info->in[*argcnt].size = sizeof(struct otx2_cpt_fc_ctx); 1098 req_info->req.dlen += sizeof(struct otx2_cpt_fc_ctx); 1099 ++(*argcnt); 1100 1101 return 0; 1102 } 1103 1104 static inline void create_hmac_ctx_hdr(struct aead_request *req, u32 *argcnt, 1105 u32 enc) 1106 { 1107 struct otx2_cpt_req_ctx *rctx = aead_request_ctx_dma(req); 1108 struct crypto_aead *tfm = crypto_aead_reqtfm(req); 1109 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(tfm); 1110 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 1111 1112 req_info->ctrl.s.dma_mode = OTX2_CPT_DMA_MODE_SG; 1113 req_info->ctrl.s.se_req = 1; 1114 req_info->req.opcode.s.major = OTX2_CPT_MAJOR_OP_HMAC | 1115 DMA_MODE_FLAG(OTX2_CPT_DMA_MODE_SG); 1116 req_info->is_trunc_hmac = ctx->is_trunc_hmac; 1117 1118 req_info->req.opcode.s.minor = 0; 1119 req_info->req.param1 = ctx->auth_key_len; 1120 req_info->req.param2 = ctx->mac_type << 8; 1121 1122 /* Add authentication key */ 1123 req_info->in[*argcnt].vptr = ctx->key; 1124 req_info->in[*argcnt].size = round_up(ctx->auth_key_len, 8); 1125 req_info->req.dlen += round_up(ctx->auth_key_len, 8); 1126 ++(*argcnt); 1127 } 1128 1129 static inline int create_aead_input_list(struct aead_request *req, u32 enc) 1130 { 1131 struct otx2_cpt_req_ctx *rctx = aead_request_ctx_dma(req); 1132 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 1133 u32 inputlen = req->cryptlen + req->assoclen; 1134 u32 status, argcnt = 0; 1135 1136 status = create_aead_ctx_hdr(req, enc, &argcnt); 1137 if (status) 1138 return status; 1139 update_input_data(req_info, req->src, inputlen, &argcnt); 1140 req_info->in_cnt = argcnt; 1141 1142 return 0; 1143 } 1144 1145 static inline void create_aead_output_list(struct aead_request *req, u32 enc, 1146 u32 mac_len) 1147 { 1148 struct otx2_cpt_req_ctx *rctx = aead_request_ctx_dma(req); 1149 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 1150 u32 argcnt = 0, outputlen = 0; 1151 1152 if (enc) 1153 outputlen = req->cryptlen + req->assoclen + mac_len; 1154 else 1155 outputlen = req->cryptlen + req->assoclen - mac_len; 1156 1157 update_output_data(req_info, req->dst, 0, outputlen, &argcnt); 1158 req_info->out_cnt = argcnt; 1159 } 1160 1161 static inline void create_aead_null_input_list(struct aead_request *req, 1162 u32 enc, u32 mac_len) 1163 { 1164 struct otx2_cpt_req_ctx *rctx = aead_request_ctx_dma(req); 1165 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 1166 u32 inputlen, argcnt = 0; 1167 1168 if (enc) 1169 inputlen = req->cryptlen + req->assoclen; 1170 else 1171 inputlen = req->cryptlen + req->assoclen - mac_len; 1172 1173 create_hmac_ctx_hdr(req, &argcnt, enc); 1174 update_input_data(req_info, req->src, inputlen, &argcnt); 1175 req_info->in_cnt = argcnt; 1176 } 1177 1178 static inline int create_aead_null_output_list(struct aead_request *req, 1179 u32 enc, u32 mac_len) 1180 { 1181 struct otx2_cpt_req_ctx *rctx = aead_request_ctx_dma(req); 1182 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 1183 struct scatterlist *dst; 1184 u8 *ptr = NULL; 1185 int argcnt = 0, status, offset; 1186 u32 inputlen; 1187 1188 if (enc) 1189 inputlen = req->cryptlen + req->assoclen; 1190 else 1191 inputlen = req->cryptlen + req->assoclen - mac_len; 1192 1193 /* 1194 * If source and destination are different 1195 * then copy payload to destination 1196 */ 1197 if (req->src != req->dst) { 1198 1199 ptr = kmalloc(inputlen, (req_info->areq->flags & 1200 CRYPTO_TFM_REQ_MAY_SLEEP) ? 1201 GFP_KERNEL : GFP_ATOMIC); 1202 if (!ptr) 1203 return -ENOMEM; 1204 1205 status = sg_copy_to_buffer(req->src, sg_nents(req->src), ptr, 1206 inputlen); 1207 if (status != inputlen) { 1208 status = -EINVAL; 1209 goto error_free; 1210 } 1211 status = sg_copy_from_buffer(req->dst, sg_nents(req->dst), ptr, 1212 inputlen); 1213 if (status != inputlen) { 1214 status = -EINVAL; 1215 goto error_free; 1216 } 1217 kfree(ptr); 1218 } 1219 1220 if (enc) { 1221 /* 1222 * In an encryption scenario hmac needs 1223 * to be appended after payload 1224 */ 1225 dst = req->dst; 1226 offset = inputlen; 1227 while (offset >= dst->length) { 1228 offset -= dst->length; 1229 dst = sg_next(dst); 1230 if (!dst) 1231 return -ENOENT; 1232 } 1233 1234 update_output_data(req_info, dst, offset, mac_len, &argcnt); 1235 } else { 1236 /* 1237 * In a decryption scenario calculated hmac for received 1238 * payload needs to be compare with hmac received 1239 */ 1240 status = sg_copy_buffer(req->src, sg_nents(req->src), 1241 rctx->fctx.hmac.s.hmac_recv, mac_len, 1242 inputlen, true); 1243 if (status != mac_len) 1244 return -EINVAL; 1245 1246 req_info->out[argcnt].vptr = rctx->fctx.hmac.s.hmac_calc; 1247 req_info->out[argcnt].size = mac_len; 1248 argcnt++; 1249 } 1250 1251 req_info->out_cnt = argcnt; 1252 return 0; 1253 1254 error_free: 1255 kfree(ptr); 1256 return status; 1257 } 1258 1259 static int aead_do_fallback(struct aead_request *req, bool is_enc) 1260 { 1261 struct otx2_cpt_req_ctx *rctx = aead_request_ctx_dma(req); 1262 struct crypto_aead *aead = crypto_aead_reqtfm(req); 1263 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(aead); 1264 int ret; 1265 1266 if (ctx->fbk_cipher) { 1267 /* Store the cipher tfm and then use the fallback tfm */ 1268 aead_request_set_tfm(&rctx->fbk_req, ctx->fbk_cipher); 1269 aead_request_set_callback(&rctx->fbk_req, req->base.flags, 1270 req->base.complete, req->base.data); 1271 aead_request_set_crypt(&rctx->fbk_req, req->src, 1272 req->dst, req->cryptlen, req->iv); 1273 aead_request_set_ad(&rctx->fbk_req, req->assoclen); 1274 ret = is_enc ? crypto_aead_encrypt(&rctx->fbk_req) : 1275 crypto_aead_decrypt(&rctx->fbk_req); 1276 } else { 1277 ret = -EINVAL; 1278 } 1279 1280 return ret; 1281 } 1282 1283 static int cpt_aead_enc_dec(struct aead_request *req, u8 reg_type, u8 enc) 1284 { 1285 struct otx2_cpt_req_ctx *rctx = aead_request_ctx_dma(req); 1286 struct otx2_cpt_req_info *req_info = &rctx->cpt_req; 1287 struct crypto_aead *tfm = crypto_aead_reqtfm(req); 1288 struct otx2_cpt_aead_ctx *ctx = crypto_aead_ctx_dma(tfm); 1289 struct pci_dev *pdev; 1290 int status, cpu_num; 1291 1292 /* Clear control words */ 1293 rctx->ctrl_word.flags = 0; 1294 rctx->fctx.enc.enc_ctrl.u = 0; 1295 1296 req_info->callback = otx2_cpt_aead_callback; 1297 req_info->areq = &req->base; 1298 req_info->req_type = reg_type; 1299 req_info->is_enc = enc; 1300 req_info->is_trunc_hmac = false; 1301 1302 switch (reg_type) { 1303 case OTX2_CPT_AEAD_ENC_DEC_REQ: 1304 status = create_aead_input_list(req, enc); 1305 if (status) 1306 return status; 1307 create_aead_output_list(req, enc, crypto_aead_authsize(tfm)); 1308 break; 1309 1310 case OTX2_CPT_AEAD_ENC_DEC_NULL_REQ: 1311 create_aead_null_input_list(req, enc, 1312 crypto_aead_authsize(tfm)); 1313 status = create_aead_null_output_list(req, enc, 1314 crypto_aead_authsize(tfm)); 1315 if (status) 1316 return status; 1317 break; 1318 1319 default: 1320 return -EINVAL; 1321 } 1322 if (!IS_ALIGNED(req_info->req.param1, ctx->enc_align_len)) 1323 return -EINVAL; 1324 1325 if (!req_info->req.param2 || 1326 (req_info->req.param1 > OTX2_CPT_MAX_REQ_SIZE) || 1327 (req_info->req.param2 > OTX2_CPT_MAX_REQ_SIZE)) 1328 return aead_do_fallback(req, enc); 1329 1330 status = get_se_device(&pdev, &cpu_num); 1331 if (status) 1332 return status; 1333 1334 req_info->ctrl.s.grp = otx2_cpt_get_kcrypto_eng_grp_num(pdev); 1335 1336 /* 1337 * We perform an asynchronous send and once 1338 * the request is completed the driver would 1339 * intimate through registered call back functions 1340 */ 1341 return otx2_cpt_do_request(pdev, req_info, cpu_num); 1342 } 1343 1344 static int otx2_cpt_aead_encrypt(struct aead_request *req) 1345 { 1346 return cpt_aead_enc_dec(req, OTX2_CPT_AEAD_ENC_DEC_REQ, true); 1347 } 1348 1349 static int otx2_cpt_aead_decrypt(struct aead_request *req) 1350 { 1351 return cpt_aead_enc_dec(req, OTX2_CPT_AEAD_ENC_DEC_REQ, false); 1352 } 1353 1354 static int otx2_cpt_aead_null_encrypt(struct aead_request *req) 1355 { 1356 return cpt_aead_enc_dec(req, OTX2_CPT_AEAD_ENC_DEC_NULL_REQ, true); 1357 } 1358 1359 static int otx2_cpt_aead_null_decrypt(struct aead_request *req) 1360 { 1361 return cpt_aead_enc_dec(req, OTX2_CPT_AEAD_ENC_DEC_NULL_REQ, false); 1362 } 1363 1364 static struct skcipher_alg otx2_cpt_skciphers[] = { { 1365 .base.cra_name = "xts(aes)", 1366 .base.cra_driver_name = "cpt_xts_aes", 1367 .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1368 .base.cra_blocksize = AES_BLOCK_SIZE, 1369 .base.cra_ctxsize = sizeof(struct otx2_cpt_enc_ctx), 1370 .base.cra_alignmask = 7, 1371 .base.cra_priority = 4001, 1372 .base.cra_module = THIS_MODULE, 1373 1374 .init = otx2_cpt_enc_dec_init, 1375 .exit = otx2_cpt_skcipher_exit, 1376 .ivsize = AES_BLOCK_SIZE, 1377 .min_keysize = 2 * AES_MIN_KEY_SIZE, 1378 .max_keysize = 2 * AES_MAX_KEY_SIZE, 1379 .setkey = otx2_cpt_skcipher_xts_setkey, 1380 .encrypt = otx2_cpt_skcipher_encrypt, 1381 .decrypt = otx2_cpt_skcipher_decrypt, 1382 }, { 1383 .base.cra_name = "cbc(aes)", 1384 .base.cra_driver_name = "cpt_cbc_aes", 1385 .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1386 .base.cra_blocksize = AES_BLOCK_SIZE, 1387 .base.cra_ctxsize = sizeof(struct otx2_cpt_enc_ctx), 1388 .base.cra_alignmask = 7, 1389 .base.cra_priority = 4001, 1390 .base.cra_module = THIS_MODULE, 1391 1392 .init = otx2_cpt_enc_dec_init, 1393 .exit = otx2_cpt_skcipher_exit, 1394 .ivsize = AES_BLOCK_SIZE, 1395 .min_keysize = AES_MIN_KEY_SIZE, 1396 .max_keysize = AES_MAX_KEY_SIZE, 1397 .setkey = otx2_cpt_skcipher_cbc_aes_setkey, 1398 .encrypt = otx2_cpt_skcipher_encrypt, 1399 .decrypt = otx2_cpt_skcipher_decrypt, 1400 }, { 1401 .base.cra_name = "ecb(aes)", 1402 .base.cra_driver_name = "cpt_ecb_aes", 1403 .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1404 .base.cra_blocksize = AES_BLOCK_SIZE, 1405 .base.cra_ctxsize = sizeof(struct otx2_cpt_enc_ctx), 1406 .base.cra_alignmask = 7, 1407 .base.cra_priority = 4001, 1408 .base.cra_module = THIS_MODULE, 1409 1410 .init = otx2_cpt_enc_dec_init, 1411 .exit = otx2_cpt_skcipher_exit, 1412 .ivsize = 0, 1413 .min_keysize = AES_MIN_KEY_SIZE, 1414 .max_keysize = AES_MAX_KEY_SIZE, 1415 .setkey = otx2_cpt_skcipher_ecb_aes_setkey, 1416 .encrypt = otx2_cpt_skcipher_encrypt, 1417 .decrypt = otx2_cpt_skcipher_decrypt, 1418 }, { 1419 .base.cra_name = "cbc(des3_ede)", 1420 .base.cra_driver_name = "cpt_cbc_des3_ede", 1421 .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1422 .base.cra_blocksize = DES3_EDE_BLOCK_SIZE, 1423 .base.cra_ctxsize = sizeof(struct otx2_cpt_enc_ctx), 1424 .base.cra_alignmask = 7, 1425 .base.cra_priority = 4001, 1426 .base.cra_module = THIS_MODULE, 1427 1428 .init = otx2_cpt_enc_dec_init, 1429 .exit = otx2_cpt_skcipher_exit, 1430 .min_keysize = DES3_EDE_KEY_SIZE, 1431 .max_keysize = DES3_EDE_KEY_SIZE, 1432 .ivsize = DES_BLOCK_SIZE, 1433 .setkey = otx2_cpt_skcipher_cbc_des3_setkey, 1434 .encrypt = otx2_cpt_skcipher_encrypt, 1435 .decrypt = otx2_cpt_skcipher_decrypt, 1436 }, { 1437 .base.cra_name = "ecb(des3_ede)", 1438 .base.cra_driver_name = "cpt_ecb_des3_ede", 1439 .base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1440 .base.cra_blocksize = DES3_EDE_BLOCK_SIZE, 1441 .base.cra_ctxsize = sizeof(struct otx2_cpt_enc_ctx), 1442 .base.cra_alignmask = 7, 1443 .base.cra_priority = 4001, 1444 .base.cra_module = THIS_MODULE, 1445 1446 .init = otx2_cpt_enc_dec_init, 1447 .exit = otx2_cpt_skcipher_exit, 1448 .min_keysize = DES3_EDE_KEY_SIZE, 1449 .max_keysize = DES3_EDE_KEY_SIZE, 1450 .ivsize = 0, 1451 .setkey = otx2_cpt_skcipher_ecb_des3_setkey, 1452 .encrypt = otx2_cpt_skcipher_encrypt, 1453 .decrypt = otx2_cpt_skcipher_decrypt, 1454 } }; 1455 1456 static struct aead_alg otx2_cpt_aeads[] = { { 1457 .base = { 1458 .cra_name = "authenc(hmac(sha1),cbc(aes))", 1459 .cra_driver_name = "cpt_hmac_sha1_cbc_aes", 1460 .cra_blocksize = AES_BLOCK_SIZE, 1461 .cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1462 .cra_ctxsize = sizeof(struct otx2_cpt_aead_ctx) + CRYPTO_DMA_PADDING, 1463 .cra_priority = 4001, 1464 .cra_alignmask = 0, 1465 .cra_module = THIS_MODULE, 1466 }, 1467 .init = otx2_cpt_aead_cbc_aes_sha1_init, 1468 .exit = otx2_cpt_aead_exit, 1469 .setkey = otx2_cpt_aead_cbc_aes_sha_setkey, 1470 .setauthsize = otx2_cpt_aead_set_authsize, 1471 .encrypt = otx2_cpt_aead_encrypt, 1472 .decrypt = otx2_cpt_aead_decrypt, 1473 .ivsize = AES_BLOCK_SIZE, 1474 .maxauthsize = SHA1_DIGEST_SIZE, 1475 }, { 1476 .base = { 1477 .cra_name = "authenc(hmac(sha256),cbc(aes))", 1478 .cra_driver_name = "cpt_hmac_sha256_cbc_aes", 1479 .cra_blocksize = AES_BLOCK_SIZE, 1480 .cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1481 .cra_ctxsize = sizeof(struct otx2_cpt_aead_ctx) + CRYPTO_DMA_PADDING, 1482 .cra_priority = 4001, 1483 .cra_alignmask = 0, 1484 .cra_module = THIS_MODULE, 1485 }, 1486 .init = otx2_cpt_aead_cbc_aes_sha256_init, 1487 .exit = otx2_cpt_aead_exit, 1488 .setkey = otx2_cpt_aead_cbc_aes_sha_setkey, 1489 .setauthsize = otx2_cpt_aead_set_authsize, 1490 .encrypt = otx2_cpt_aead_encrypt, 1491 .decrypt = otx2_cpt_aead_decrypt, 1492 .ivsize = AES_BLOCK_SIZE, 1493 .maxauthsize = SHA256_DIGEST_SIZE, 1494 }, { 1495 .base = { 1496 .cra_name = "authenc(hmac(sha384),cbc(aes))", 1497 .cra_driver_name = "cpt_hmac_sha384_cbc_aes", 1498 .cra_blocksize = AES_BLOCK_SIZE, 1499 .cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1500 .cra_ctxsize = sizeof(struct otx2_cpt_aead_ctx) + CRYPTO_DMA_PADDING, 1501 .cra_priority = 4001, 1502 .cra_alignmask = 0, 1503 .cra_module = THIS_MODULE, 1504 }, 1505 .init = otx2_cpt_aead_cbc_aes_sha384_init, 1506 .exit = otx2_cpt_aead_exit, 1507 .setkey = otx2_cpt_aead_cbc_aes_sha_setkey, 1508 .setauthsize = otx2_cpt_aead_set_authsize, 1509 .encrypt = otx2_cpt_aead_encrypt, 1510 .decrypt = otx2_cpt_aead_decrypt, 1511 .ivsize = AES_BLOCK_SIZE, 1512 .maxauthsize = SHA384_DIGEST_SIZE, 1513 }, { 1514 .base = { 1515 .cra_name = "authenc(hmac(sha512),cbc(aes))", 1516 .cra_driver_name = "cpt_hmac_sha512_cbc_aes", 1517 .cra_blocksize = AES_BLOCK_SIZE, 1518 .cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1519 .cra_ctxsize = sizeof(struct otx2_cpt_aead_ctx) + CRYPTO_DMA_PADDING, 1520 .cra_priority = 4001, 1521 .cra_alignmask = 0, 1522 .cra_module = THIS_MODULE, 1523 }, 1524 .init = otx2_cpt_aead_cbc_aes_sha512_init, 1525 .exit = otx2_cpt_aead_exit, 1526 .setkey = otx2_cpt_aead_cbc_aes_sha_setkey, 1527 .setauthsize = otx2_cpt_aead_set_authsize, 1528 .encrypt = otx2_cpt_aead_encrypt, 1529 .decrypt = otx2_cpt_aead_decrypt, 1530 .ivsize = AES_BLOCK_SIZE, 1531 .maxauthsize = SHA512_DIGEST_SIZE, 1532 }, { 1533 .base = { 1534 .cra_name = "authenc(hmac(sha1),ecb(cipher_null))", 1535 .cra_driver_name = "cpt_hmac_sha1_ecb_null", 1536 .cra_blocksize = 1, 1537 .cra_flags = CRYPTO_ALG_ASYNC, 1538 .cra_ctxsize = sizeof(struct otx2_cpt_aead_ctx) + CRYPTO_DMA_PADDING, 1539 .cra_priority = 4001, 1540 .cra_alignmask = 0, 1541 .cra_module = THIS_MODULE, 1542 }, 1543 .init = otx2_cpt_aead_ecb_null_sha1_init, 1544 .exit = otx2_cpt_aead_exit, 1545 .setkey = otx2_cpt_aead_ecb_null_sha_setkey, 1546 .setauthsize = otx2_cpt_aead_null_set_authsize, 1547 .encrypt = otx2_cpt_aead_null_encrypt, 1548 .decrypt = otx2_cpt_aead_null_decrypt, 1549 .ivsize = 0, 1550 .maxauthsize = SHA1_DIGEST_SIZE, 1551 }, { 1552 .base = { 1553 .cra_name = "authenc(hmac(sha256),ecb(cipher_null))", 1554 .cra_driver_name = "cpt_hmac_sha256_ecb_null", 1555 .cra_blocksize = 1, 1556 .cra_flags = CRYPTO_ALG_ASYNC, 1557 .cra_ctxsize = sizeof(struct otx2_cpt_aead_ctx) + CRYPTO_DMA_PADDING, 1558 .cra_priority = 4001, 1559 .cra_alignmask = 0, 1560 .cra_module = THIS_MODULE, 1561 }, 1562 .init = otx2_cpt_aead_ecb_null_sha256_init, 1563 .exit = otx2_cpt_aead_exit, 1564 .setkey = otx2_cpt_aead_ecb_null_sha_setkey, 1565 .setauthsize = otx2_cpt_aead_null_set_authsize, 1566 .encrypt = otx2_cpt_aead_null_encrypt, 1567 .decrypt = otx2_cpt_aead_null_decrypt, 1568 .ivsize = 0, 1569 .maxauthsize = SHA256_DIGEST_SIZE, 1570 }, { 1571 .base = { 1572 .cra_name = "authenc(hmac(sha384),ecb(cipher_null))", 1573 .cra_driver_name = "cpt_hmac_sha384_ecb_null", 1574 .cra_blocksize = 1, 1575 .cra_flags = CRYPTO_ALG_ASYNC, 1576 .cra_ctxsize = sizeof(struct otx2_cpt_aead_ctx) + CRYPTO_DMA_PADDING, 1577 .cra_priority = 4001, 1578 .cra_alignmask = 0, 1579 .cra_module = THIS_MODULE, 1580 }, 1581 .init = otx2_cpt_aead_ecb_null_sha384_init, 1582 .exit = otx2_cpt_aead_exit, 1583 .setkey = otx2_cpt_aead_ecb_null_sha_setkey, 1584 .setauthsize = otx2_cpt_aead_null_set_authsize, 1585 .encrypt = otx2_cpt_aead_null_encrypt, 1586 .decrypt = otx2_cpt_aead_null_decrypt, 1587 .ivsize = 0, 1588 .maxauthsize = SHA384_DIGEST_SIZE, 1589 }, { 1590 .base = { 1591 .cra_name = "authenc(hmac(sha512),ecb(cipher_null))", 1592 .cra_driver_name = "cpt_hmac_sha512_ecb_null", 1593 .cra_blocksize = 1, 1594 .cra_flags = CRYPTO_ALG_ASYNC, 1595 .cra_ctxsize = sizeof(struct otx2_cpt_aead_ctx) + CRYPTO_DMA_PADDING, 1596 .cra_priority = 4001, 1597 .cra_alignmask = 0, 1598 .cra_module = THIS_MODULE, 1599 }, 1600 .init = otx2_cpt_aead_ecb_null_sha512_init, 1601 .exit = otx2_cpt_aead_exit, 1602 .setkey = otx2_cpt_aead_ecb_null_sha_setkey, 1603 .setauthsize = otx2_cpt_aead_null_set_authsize, 1604 .encrypt = otx2_cpt_aead_null_encrypt, 1605 .decrypt = otx2_cpt_aead_null_decrypt, 1606 .ivsize = 0, 1607 .maxauthsize = SHA512_DIGEST_SIZE, 1608 }, { 1609 .base = { 1610 .cra_name = "rfc4106(gcm(aes))", 1611 .cra_driver_name = "cpt_rfc4106_gcm_aes", 1612 .cra_blocksize = 1, 1613 .cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK, 1614 .cra_ctxsize = sizeof(struct otx2_cpt_aead_ctx) + CRYPTO_DMA_PADDING, 1615 .cra_priority = 4001, 1616 .cra_alignmask = 0, 1617 .cra_module = THIS_MODULE, 1618 }, 1619 .init = otx2_cpt_aead_gcm_aes_init, 1620 .exit = otx2_cpt_aead_exit, 1621 .setkey = otx2_cpt_aead_gcm_aes_setkey, 1622 .setauthsize = otx2_cpt_aead_gcm_set_authsize, 1623 .encrypt = otx2_cpt_aead_encrypt, 1624 .decrypt = otx2_cpt_aead_decrypt, 1625 .ivsize = AES_GCM_IV_SIZE, 1626 .maxauthsize = AES_GCM_ICV_SIZE, 1627 } }; 1628 1629 static inline int cpt_register_algs(void) 1630 { 1631 int i, err = 0; 1632 1633 for (i = 0; i < ARRAY_SIZE(otx2_cpt_skciphers); i++) 1634 otx2_cpt_skciphers[i].base.cra_flags &= ~CRYPTO_ALG_DEAD; 1635 1636 err = crypto_register_skciphers(otx2_cpt_skciphers, 1637 ARRAY_SIZE(otx2_cpt_skciphers)); 1638 if (err) 1639 return err; 1640 1641 for (i = 0; i < ARRAY_SIZE(otx2_cpt_aeads); i++) 1642 otx2_cpt_aeads[i].base.cra_flags &= ~CRYPTO_ALG_DEAD; 1643 1644 err = crypto_register_aeads(otx2_cpt_aeads, 1645 ARRAY_SIZE(otx2_cpt_aeads)); 1646 if (err) { 1647 crypto_unregister_skciphers(otx2_cpt_skciphers, 1648 ARRAY_SIZE(otx2_cpt_skciphers)); 1649 return err; 1650 } 1651 1652 return 0; 1653 } 1654 1655 static inline void cpt_unregister_algs(void) 1656 { 1657 crypto_unregister_skciphers(otx2_cpt_skciphers, 1658 ARRAY_SIZE(otx2_cpt_skciphers)); 1659 crypto_unregister_aeads(otx2_cpt_aeads, ARRAY_SIZE(otx2_cpt_aeads)); 1660 } 1661 1662 static int compare_func(const void *lptr, const void *rptr) 1663 { 1664 const struct cpt_device_desc *ldesc = (struct cpt_device_desc *) lptr; 1665 const struct cpt_device_desc *rdesc = (struct cpt_device_desc *) rptr; 1666 1667 if (ldesc->dev->devfn < rdesc->dev->devfn) 1668 return -1; 1669 if (ldesc->dev->devfn > rdesc->dev->devfn) 1670 return 1; 1671 return 0; 1672 } 1673 1674 static void swap_func(void *lptr, void *rptr, int size) 1675 { 1676 struct cpt_device_desc *ldesc = lptr; 1677 struct cpt_device_desc *rdesc = rptr; 1678 1679 swap(*ldesc, *rdesc); 1680 } 1681 1682 int otx2_cpt_crypto_init(struct pci_dev *pdev, struct module *mod, 1683 int num_queues, int num_devices) 1684 { 1685 int ret = 0; 1686 int count; 1687 1688 mutex_lock(&mutex); 1689 count = atomic_read(&se_devices.count); 1690 if (count >= OTX2_CPT_MAX_LFS_NUM) { 1691 dev_err(&pdev->dev, "No space to add a new device\n"); 1692 ret = -ENOSPC; 1693 goto unlock; 1694 } 1695 se_devices.desc[count].num_queues = num_queues; 1696 se_devices.desc[count++].dev = pdev; 1697 atomic_inc(&se_devices.count); 1698 1699 if (atomic_read(&se_devices.count) == num_devices && 1700 is_crypto_registered == false) { 1701 if (cpt_register_algs()) { 1702 dev_err(&pdev->dev, 1703 "Error in registering crypto algorithms\n"); 1704 ret = -EINVAL; 1705 goto unlock; 1706 } 1707 try_module_get(mod); 1708 is_crypto_registered = true; 1709 } 1710 sort(se_devices.desc, count, sizeof(struct cpt_device_desc), 1711 compare_func, swap_func); 1712 1713 unlock: 1714 mutex_unlock(&mutex); 1715 return ret; 1716 } 1717 1718 void otx2_cpt_crypto_exit(struct pci_dev *pdev, struct module *mod) 1719 { 1720 struct cpt_device_table *dev_tbl; 1721 bool dev_found = false; 1722 int i, j, count; 1723 1724 mutex_lock(&mutex); 1725 1726 dev_tbl = &se_devices; 1727 count = atomic_read(&dev_tbl->count); 1728 for (i = 0; i < count; i++) { 1729 if (pdev == dev_tbl->desc[i].dev) { 1730 for (j = i; j < count-1; j++) 1731 dev_tbl->desc[j] = dev_tbl->desc[j+1]; 1732 dev_found = true; 1733 break; 1734 } 1735 } 1736 1737 if (!dev_found) { 1738 dev_err(&pdev->dev, "%s device not found\n", __func__); 1739 goto unlock; 1740 } 1741 if (atomic_dec_and_test(&se_devices.count)) { 1742 cpt_unregister_algs(); 1743 module_put(mod); 1744 is_crypto_registered = false; 1745 } 1746 1747 unlock: 1748 mutex_unlock(&mutex); 1749 } 1750