Skip to content

Commit

Permalink
crypto: lrw - simplify error handling in create()
Browse files Browse the repository at this point in the history
Simplify the error handling in the LRW template's ->create() function by
taking advantage of crypto_drop_skcipher() now accepting (as a no-op) a
spawn that hasn't been grabbed yet.

Signed-off-by: Eric Biggers <[email protected]>
Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
ebiggers authored and herbertx committed Mar 6, 2020
1 parent 376ffe1 commit d570631
Showing 1 changed file with 11 additions and 17 deletions.
28 changes: 11 additions & 17 deletions crypto/lrw.c
Original file line number Diff line number Diff line change
Expand Up @@ -343,15 +343,15 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb)

err = -EINVAL;
if (alg->base.cra_blocksize != LRW_BLOCK_SIZE)
goto err_drop_spawn;
goto err_free_inst;

if (crypto_skcipher_alg_ivsize(alg))
goto err_drop_spawn;
goto err_free_inst;

err = crypto_inst_setname(skcipher_crypto_instance(inst), "lrw",
&alg->base);
if (err)
goto err_drop_spawn;
goto err_free_inst;

err = -EINVAL;
cipher_name = alg->base.cra_name;
Expand All @@ -364,20 +364,20 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb)

len = strlcpy(ecb_name, cipher_name + 4, sizeof(ecb_name));
if (len < 2 || len >= sizeof(ecb_name))
goto err_drop_spawn;
goto err_free_inst;

if (ecb_name[len - 1] != ')')
goto err_drop_spawn;
goto err_free_inst;

ecb_name[len - 1] = 0;

if (snprintf(inst->alg.base.cra_name, CRYPTO_MAX_ALG_NAME,
"lrw(%s)", ecb_name) >= CRYPTO_MAX_ALG_NAME) {
err = -ENAMETOOLONG;
goto err_drop_spawn;
goto err_free_inst;
}
} else
goto err_drop_spawn;
goto err_free_inst;

inst->alg.base.cra_flags = alg->base.cra_flags & CRYPTO_ALG_ASYNC;
inst->alg.base.cra_priority = alg->base.cra_priority;
Expand All @@ -403,17 +403,11 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb)
inst->free = free;

err = skcipher_register_instance(tmpl, inst);
if (err)
goto err_drop_spawn;

out:
return err;

err_drop_spawn:
crypto_drop_skcipher(spawn);
if (err) {
err_free_inst:
kfree(inst);
goto out;
free(inst);
}
return err;
}

static struct crypto_template crypto_tmpl = {
Expand Down

0 comments on commit d570631

Please sign in to comment.