crypto: padlock-sha - Use init_tfm/exit_tfm interface
authorHerbert Xu <herbert@gondor.apana.org.au>
Sun, 8 Dec 2019 05:42:52 +0000 (13:42 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 11 Dec 2019 08:48:39 +0000 (16:48 +0800)
This patch switches padlock-sha over to the new init_tfm/exit_tfm
interface as opposed to cra_init/cra_exit.  This way the shash API
can make sure that descsize does not exceed the maximum.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Reviewed-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/padlock-sha.c

index ddf1b54..c826abe 100644 (file)
@@ -190,13 +190,11 @@ static int padlock_sha256_final(struct shash_desc *desc, u8 *out)
        return padlock_sha256_finup(desc, buf, 0, out);
 }
 
-static int padlock_cra_init(struct crypto_tfm *tfm)
+static int padlock_init_tfm(struct crypto_shash *hash)
 {
-       struct crypto_shash *hash = __crypto_shash_cast(tfm);
-       const char *fallback_driver_name = crypto_tfm_alg_name(tfm);
-       struct padlock_sha_ctx *ctx = crypto_tfm_ctx(tfm);
+       const char *fallback_driver_name = crypto_shash_alg_name(hash);
+       struct padlock_sha_ctx *ctx = crypto_shash_ctx(hash);
        struct crypto_shash *fallback_tfm;
-       int err = -ENOMEM;
 
        /* Allocate a fallback and abort if it failed. */
        fallback_tfm = crypto_alloc_shash(fallback_driver_name, 0,
@@ -204,21 +202,17 @@ static int padlock_cra_init(struct crypto_tfm *tfm)
        if (IS_ERR(fallback_tfm)) {
                printk(KERN_WARNING PFX "Fallback driver '%s' could not be loaded!\n",
                       fallback_driver_name);
-               err = PTR_ERR(fallback_tfm);
-               goto out;
+               return PTR_ERR(fallback_tfm);
        }
 
        ctx->fallback = fallback_tfm;
        hash->descsize += crypto_shash_descsize(fallback_tfm);
        return 0;
-
-out:
-       return err;
 }
 
-static void padlock_cra_exit(struct crypto_tfm *tfm)
+static void padlock_exit_tfm(struct crypto_shash *hash)
 {
-       struct padlock_sha_ctx *ctx = crypto_tfm_ctx(tfm);
+       struct padlock_sha_ctx *ctx = crypto_shash_ctx(hash);
 
        crypto_free_shash(ctx->fallback);
 }
@@ -231,6 +225,8 @@ static struct shash_alg sha1_alg = {
        .final          =       padlock_sha1_final,
        .export         =       padlock_sha_export,
        .import         =       padlock_sha_import,
+       .init_tfm       =       padlock_init_tfm,
+       .exit_tfm       =       padlock_exit_tfm,
        .descsize       =       sizeof(struct padlock_sha_desc),
        .statesize      =       sizeof(struct sha1_state),
        .base           =       {
@@ -241,8 +237,6 @@ static struct shash_alg sha1_alg = {
                .cra_blocksize          =       SHA1_BLOCK_SIZE,
                .cra_ctxsize            =       sizeof(struct padlock_sha_ctx),
                .cra_module             =       THIS_MODULE,
-               .cra_init               =       padlock_cra_init,
-               .cra_exit               =       padlock_cra_exit,
        }
 };
 
@@ -254,6 +248,8 @@ static struct shash_alg sha256_alg = {
        .final          =       padlock_sha256_final,
        .export         =       padlock_sha_export,
        .import         =       padlock_sha_import,
+       .init_tfm       =       padlock_init_tfm,
+       .exit_tfm       =       padlock_exit_tfm,
        .descsize       =       sizeof(struct padlock_sha_desc),
        .statesize      =       sizeof(struct sha256_state),
        .base           =       {
@@ -264,8 +260,6 @@ static struct shash_alg sha256_alg = {
                .cra_blocksize          =       SHA256_BLOCK_SIZE,
                .cra_ctxsize            =       sizeof(struct padlock_sha_ctx),
                .cra_module             =       THIS_MODULE,
-               .cra_init               =       padlock_cra_init,
-               .cra_exit               =       padlock_cra_exit,
        }
 };