Commit 732e5409 authored by Eric Biggers's avatar Eric Biggers Committed by Herbert Xu

crypto: xts - simplify error handling in ->create()

Simplify the error handling in the XTS 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: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 0708bb43
...@@ -379,15 +379,15 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb) ...@@ -379,15 +379,15 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb)
err = -EINVAL; err = -EINVAL;
if (alg->base.cra_blocksize != XTS_BLOCK_SIZE) if (alg->base.cra_blocksize != XTS_BLOCK_SIZE)
goto err_drop_spawn; goto err_free_inst;
if (crypto_skcipher_alg_ivsize(alg)) if (crypto_skcipher_alg_ivsize(alg))
goto err_drop_spawn; goto err_free_inst;
err = crypto_inst_setname(skcipher_crypto_instance(inst), "xts", err = crypto_inst_setname(skcipher_crypto_instance(inst), "xts",
&alg->base); &alg->base);
if (err) if (err)
goto err_drop_spawn; goto err_free_inst;
err = -EINVAL; err = -EINVAL;
cipher_name = alg->base.cra_name; cipher_name = alg->base.cra_name;
...@@ -400,20 +400,20 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb) ...@@ -400,20 +400,20 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb)
len = strlcpy(ctx->name, cipher_name + 4, sizeof(ctx->name)); len = strlcpy(ctx->name, cipher_name + 4, sizeof(ctx->name));
if (len < 2 || len >= sizeof(ctx->name)) if (len < 2 || len >= sizeof(ctx->name))
goto err_drop_spawn; goto err_free_inst;
if (ctx->name[len - 1] != ')') if (ctx->name[len - 1] != ')')
goto err_drop_spawn; goto err_free_inst;
ctx->name[len - 1] = 0; ctx->name[len - 1] = 0;
if (snprintf(inst->alg.base.cra_name, CRYPTO_MAX_ALG_NAME, if (snprintf(inst->alg.base.cra_name, CRYPTO_MAX_ALG_NAME,
"xts(%s)", ctx->name) >= CRYPTO_MAX_ALG_NAME) { "xts(%s)", ctx->name) >= CRYPTO_MAX_ALG_NAME) {
err = -ENAMETOOLONG; err = -ENAMETOOLONG;
goto err_drop_spawn; goto err_free_inst;
} }
} else } 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_flags = alg->base.cra_flags & CRYPTO_ALG_ASYNC;
inst->alg.base.cra_priority = alg->base.cra_priority; inst->alg.base.cra_priority = alg->base.cra_priority;
...@@ -437,17 +437,11 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb) ...@@ -437,17 +437,11 @@ static int create(struct crypto_template *tmpl, struct rtattr **tb)
inst->free = free; inst->free = free;
err = skcipher_register_instance(tmpl, inst); err = skcipher_register_instance(tmpl, inst);
if (err) if (err) {
goto err_drop_spawn;
out:
return err;
err_drop_spawn:
crypto_drop_skcipher(&ctx->spawn);
err_free_inst: err_free_inst:
kfree(inst); free(inst);
goto out; }
return err;
} }
static struct crypto_template crypto_tmpl = { static struct crypto_template crypto_tmpl = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment