crypto: aead - Add type-safe init/exit functions
[firefly-linux-kernel-4.4.55.git] / crypto / aead.c
index 8cdea89909cd1a968975621e4382009d771121d7..4bab3cff357864bbaccf8b57f45723502eae9cf3 100644 (file)
@@ -174,6 +174,14 @@ static int crypto_old_aead_init_tfm(struct crypto_tfm *tfm)
        return 0;
 }
 
+static void crypto_aead_exit_tfm(struct crypto_tfm *tfm)
+{
+       struct crypto_aead *aead = __crypto_aead_cast(tfm);
+       struct aead_alg *alg = crypto_aead_alg(aead);
+
+       alg->exit(aead);
+}
+
 static int crypto_aead_init_tfm(struct crypto_tfm *tfm)
 {
        struct crypto_aead *aead = __crypto_aead_cast(tfm);
@@ -189,6 +197,12 @@ static int crypto_aead_init_tfm(struct crypto_tfm *tfm)
        aead->child = __crypto_aead_cast(tfm);
        aead->authsize = alg->maxauthsize;
 
+       if (alg->exit)
+               aead->base.exit = crypto_aead_exit_tfm;
+
+       if (alg->init)
+               return alg->init(aead);
+
        return 0;
 }