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: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
0708bb4353
commit
732e540953
28
crypto/xts.c
28
crypto/xts.c
|
@ -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)
|
||||||
|
|
||||||
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)
|
||||||
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 = {
|
||||||
|
|
Loading…
Reference in New Issue