crypto: pcrypt - Propagate new AEAD implementation flag
authorHerbert Xu <herbert@gondor.apana.org.au>
Wed, 8 Jul 2015 23:17:18 +0000 (07:17 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 14 Jul 2015 06:56:45 +0000 (14:56 +0800)
This patch allows the CRYPTO_ALG_AEAD_NEW flag to be propagated.

It also restores the ASYNC bit that went missing during the AEAD
conversion.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/pcrypt.c

index 45e7d515567294506142904fd771005c8e1ca70c..001a3a3e75dfd152c4687bc5b70eb0e60ce2faf8 100644 (file)
@@ -274,11 +274,16 @@ static int pcrypt_create_aead(struct crypto_template *tmpl, struct rtattr **tb,
                              u32 type, u32 mask)
 {
        struct pcrypt_instance_ctx *ctx;
+       struct crypto_attr_type *algt;
        struct aead_instance *inst;
        struct aead_alg *alg;
        const char *name;
        int err;
 
+       algt = crypto_get_attr_type(tb);
+       if (IS_ERR(algt))
+               return PTR_ERR(algt);
+
        name = crypto_attr_alg_name(tb[1]);
        if (IS_ERR(name))
                return PTR_ERR(name);
@@ -290,7 +295,9 @@ static int pcrypt_create_aead(struct crypto_template *tmpl, struct rtattr **tb,
        ctx = aead_instance_ctx(inst);
        crypto_set_aead_spawn(&ctx->spawn, aead_crypto_instance(inst));
 
-       err = crypto_grab_aead(&ctx->spawn, name, 0, 0);
+       err = crypto_grab_aead(&ctx->spawn, name,
+                              algt->type & CRYPTO_ALG_AEAD_NEW,
+                              algt->mask & CRYPTO_ALG_AEAD_NEW);
        if (err)
                goto out_free_inst;
 
@@ -299,6 +306,9 @@ static int pcrypt_create_aead(struct crypto_template *tmpl, struct rtattr **tb,
        if (err)
                goto out_drop_aead;
 
+       inst->alg.base.cra_flags = CRYPTO_ALG_ASYNC;
+       inst->alg.base.cra_flags |= alg->base.cra_flags & CRYPTO_ALG_AEAD_NEW;
+
        inst->alg.ivsize = crypto_aead_alg_ivsize(alg);
        inst->alg.maxauthsize = crypto_aead_alg_maxauthsize(alg);