Skip to content

Commit

Permalink
crypto: geniv - convert to new way of freeing instances
Browse files Browse the repository at this point in the history
Convert the "seqiv" template to the new way of freeing instances where a
->free() method is installed to the instance struct itself.  Also remove
the unused implementation of the old way of freeing instances from the
"echainiv" template, since it's already using the new way too.

In doing this, also simplify the code by making the helper function
aead_geniv_alloc() install the ->free() method, instead of making seqiv
and echainiv do this themselves.  This is analogous to how
skcipher_alloc_instance_simple() works.

This will allow removing support for the old way of freeing instances.

Signed-off-by: Eric Biggers <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
ebiggers authored and herbertx committed Jan 9, 2020
1 parent 48fb3e5 commit 0f8f6d8
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 40 deletions.
20 changes: 4 additions & 16 deletions crypto/echainiv.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,29 +133,17 @@ static int echainiv_aead_create(struct crypto_template *tmpl,
inst->alg.base.cra_ctxsize = sizeof(struct aead_geniv_ctx);
inst->alg.base.cra_ctxsize += inst->alg.ivsize;

inst->free = aead_geniv_free;

err = aead_register_instance(tmpl, inst);
if (err)
goto free_inst;

out:
return err;

if (err) {
free_inst:
aead_geniv_free(inst);
goto out;
}

static void echainiv_free(struct crypto_instance *inst)
{
aead_geniv_free(aead_instance(inst));
inst->free(inst);
}
return err;
}

static struct crypto_template echainiv_tmpl = {
.name = "echainiv",
.create = echainiv_aead_create,
.free = echainiv_free,
.module = THIS_MODULE,
};

Expand Down
15 changes: 8 additions & 7 deletions crypto/geniv.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ static int aead_geniv_setauthsize(struct crypto_aead *tfm,
return crypto_aead_setauthsize(ctx->child, authsize);
}

static void aead_geniv_free(struct aead_instance *inst)
{
crypto_drop_aead(aead_instance_ctx(inst));
kfree(inst);
}

struct aead_instance *aead_geniv_alloc(struct crypto_template *tmpl,
struct rtattr **tb, u32 type, u32 mask)
{
Expand Down Expand Up @@ -100,6 +106,8 @@ struct aead_instance *aead_geniv_alloc(struct crypto_template *tmpl,
inst->alg.ivsize = ivsize;
inst->alg.maxauthsize = maxauthsize;

inst->free = aead_geniv_free;

out:
return inst;

Expand All @@ -112,13 +120,6 @@ struct aead_instance *aead_geniv_alloc(struct crypto_template *tmpl,
}
EXPORT_SYMBOL_GPL(aead_geniv_alloc);

void aead_geniv_free(struct aead_instance *inst)
{
crypto_drop_aead(aead_instance_ctx(inst));
kfree(inst);
}
EXPORT_SYMBOL_GPL(aead_geniv_free);

int aead_init_geniv(struct crypto_aead *aead)
{
struct aead_geniv_ctx *ctx = crypto_aead_ctx(aead);
Expand Down
20 changes: 4 additions & 16 deletions crypto/seqiv.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
#include <linux/slab.h>
#include <linux/string.h>

static void seqiv_free(struct crypto_instance *inst);

static void seqiv_aead_encrypt_complete2(struct aead_request *req, int err)
{
struct aead_request *subreq = aead_request_ctx(req);
Expand Down Expand Up @@ -159,15 +157,11 @@ static int seqiv_aead_create(struct crypto_template *tmpl, struct rtattr **tb)
inst->alg.base.cra_ctxsize += inst->alg.ivsize;

err = aead_register_instance(tmpl, inst);
if (err)
goto free_inst;

out:
return err;

if (err) {
free_inst:
aead_geniv_free(inst);
goto out;
inst->free(inst);
}
return err;
}

static int seqiv_create(struct crypto_template *tmpl, struct rtattr **tb)
Expand All @@ -184,15 +178,9 @@ static int seqiv_create(struct crypto_template *tmpl, struct rtattr **tb)
return seqiv_aead_create(tmpl, tb);
}

static void seqiv_free(struct crypto_instance *inst)
{
aead_geniv_free(aead_instance(inst));
}

static struct crypto_template seqiv_tmpl = {
.name = "seqiv",
.create = seqiv_create,
.free = seqiv_free,
.module = THIS_MODULE,
};

Expand Down
1 change: 0 additions & 1 deletion include/crypto/internal/geniv.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ struct aead_geniv_ctx {

struct aead_instance *aead_geniv_alloc(struct crypto_template *tmpl,
struct rtattr **tb, u32 type, u32 mask);
void aead_geniv_free(struct aead_instance *inst);
int aead_init_geniv(struct crypto_aead *tfm);
void aead_exit_geniv(struct crypto_aead *tfm);

Expand Down

0 comments on commit 0f8f6d8

Please sign in to comment.