Commit 3d6979bf authored by Herbert Xu's avatar Herbert Xu
Browse files

crypto: api - Add cra_type->destroy hook



Add a cra_type->destroy hook so that resources can be freed after
the last user of a registered algorithm is gone.

Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 01894c84
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -707,5 +707,15 @@ void crypto_req_done(void *data, int err)
}
EXPORT_SYMBOL_GPL(crypto_req_done);

void crypto_destroy_alg(struct crypto_alg *alg)
{
	if (alg->cra_type && alg->cra_type->destroy)
		alg->cra_type->destroy(alg);

	if (alg->cra_destroy)
		alg->cra_destroy(alg);
}
EXPORT_SYMBOL_GPL(crypto_destroy_alg);

MODULE_DESCRIPTION("Cryptographic core API");
MODULE_LICENSE("GPL");
+4 −2
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ struct crypto_type {
	void (*show)(struct seq_file *m, struct crypto_alg *alg);
	int (*report)(struct sk_buff *skb, struct crypto_alg *alg);
	void (*free)(struct crypto_instance *inst);
	void (*destroy)(struct crypto_alg *alg);

	unsigned int type;
	unsigned int maskclear;
@@ -127,6 +128,7 @@ void *crypto_create_tfm_node(struct crypto_alg *alg,
			const struct crypto_type *frontend, int node);
void *crypto_clone_tfm(const struct crypto_type *frontend,
		       struct crypto_tfm *otfm);
void crypto_destroy_alg(struct crypto_alg *alg);

static inline void *crypto_create_tfm(struct crypto_alg *alg,
			const struct crypto_type *frontend)
@@ -163,8 +165,8 @@ static inline struct crypto_alg *crypto_alg_get(struct crypto_alg *alg)

static inline void crypto_alg_put(struct crypto_alg *alg)
{
	if (refcount_dec_and_test(&alg->cra_refcnt) && alg->cra_destroy)
		alg->cra_destroy(alg);
	if (refcount_dec_and_test(&alg->cra_refcnt))
		crypto_destroy_alg(alg);
}

static inline int crypto_tmpl_get(struct crypto_template *tmpl)