Commit 505fd21d6138545aa5e96aa738975e6a9deb98a9
Committed by
Herbert Xu
1 parent
811d8f0626
Exists in
master
and in
39 other branches
crypto: cryptd - Use nivcipher in cryptd_alloc_ablkcipher
Use crypto_alloc_base() instead of crypto_alloc_ablkcipher() to allocate underlying tfm in cryptd_alloc_ablkcipher. Because crypto_alloc_ablkcipher() prefer GENIV encapsulated crypto instead of raw one, while cryptd_alloc_ablkcipher needed the raw one. Signed-off-by: Huang Ying <ying.huang@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Showing 1 changed file with 9 additions and 5 deletions Side-by-side Diff
crypto/cryptd.c
... | ... | @@ -586,20 +586,24 @@ |
586 | 586 | u32 type, u32 mask) |
587 | 587 | { |
588 | 588 | char cryptd_alg_name[CRYPTO_MAX_ALG_NAME]; |
589 | - struct crypto_ablkcipher *tfm; | |
589 | + struct crypto_tfm *tfm; | |
590 | 590 | |
591 | 591 | if (snprintf(cryptd_alg_name, CRYPTO_MAX_ALG_NAME, |
592 | 592 | "cryptd(%s)", alg_name) >= CRYPTO_MAX_ALG_NAME) |
593 | 593 | return ERR_PTR(-EINVAL); |
594 | - tfm = crypto_alloc_ablkcipher(cryptd_alg_name, type, mask); | |
594 | + type &= ~(CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_GENIV); | |
595 | + type |= CRYPTO_ALG_TYPE_BLKCIPHER; | |
596 | + mask &= ~CRYPTO_ALG_TYPE_MASK; | |
597 | + mask |= (CRYPTO_ALG_GENIV | CRYPTO_ALG_TYPE_BLKCIPHER_MASK); | |
598 | + tfm = crypto_alloc_base(cryptd_alg_name, type, mask); | |
595 | 599 | if (IS_ERR(tfm)) |
596 | 600 | return ERR_CAST(tfm); |
597 | - if (crypto_ablkcipher_tfm(tfm)->__crt_alg->cra_module != THIS_MODULE) { | |
598 | - crypto_free_ablkcipher(tfm); | |
601 | + if (tfm->__crt_alg->cra_module != THIS_MODULE) { | |
602 | + crypto_free_tfm(tfm); | |
599 | 603 | return ERR_PTR(-EINVAL); |
600 | 604 | } |
601 | 605 | |
602 | - return __cryptd_ablkcipher_cast(tfm); | |
606 | + return __cryptd_ablkcipher_cast(__crypto_ablkcipher_cast(tfm)); | |
603 | 607 | } |
604 | 608 | EXPORT_SYMBOL_GPL(cryptd_alloc_ablkcipher); |
605 | 609 |