Re: [PATCH v3] crypto: remove instance when test failed

From: Herbert Xu
Date: Thu Apr 09 2015 - 03:41:53 EST


On Thu, Apr 09, 2015 at 09:36:03AM +0200, Stephan Mueller wrote:
>
> diff --git a/crypto/algapi.c b/crypto/algapi.c
> index f1d0307..cfca1de 100644
> --- a/crypto/algapi.c
> +++ b/crypto/algapi.c
> @@ -533,6 +533,13 @@ int crypto_register_instance(struct crypto_template *tmpl,
> if (IS_ERR(larval))
> goto unlock;
>
> + err = -EAGAIN;
> + if (unlikely(!crypto_mod_get(&inst->alg))) {
> + up_write(&crypto_alg_sem);
> + crypto_unregister_instance(inst);
> + goto err;
> + }

Just grab the reference count as soon as you enter the function
and then you can unconditionally drop the reference count at the
end. If you fail to grab it then just return an error and the
caller will free it for you.

Cheers,
--
Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/