diff options
| -rw-r--r-- | crypto/algapi.c | 35 | ||||
| -rw-r--r-- | include/linux/crypto.h | 2 | 
2 files changed, 37 insertions, 0 deletions
diff --git a/crypto/algapi.c b/crypto/algapi.c index 9d4a9fe913f..056571b8544 100644 --- a/crypto/algapi.c +++ b/crypto/algapi.c @@ -405,6 +405,41 @@ int crypto_unregister_alg(struct crypto_alg *alg)  }  EXPORT_SYMBOL_GPL(crypto_unregister_alg); +int crypto_register_algs(struct crypto_alg *algs, int count) +{ +	int i, ret; + +	for (i = 0; i < count; i++) { +		ret = crypto_register_alg(&algs[i]); +		if (ret) +			goto err; +	} + +	return 0; + +err: +	for (--i; i >= 0; --i) +		crypto_unregister_alg(&algs[i]); + +	return ret; +} +EXPORT_SYMBOL_GPL(crypto_register_algs); + +int crypto_unregister_algs(struct crypto_alg *algs, int count) +{ +	int i, ret; + +	for (i = 0; i < count; i++) { +		ret = crypto_unregister_alg(&algs[i]); +		if (ret) +			pr_err("Failed to unregister %s %s: %d\n", +			       algs[i].cra_driver_name, algs[i].cra_name, ret); +	} + +	return 0; +} +EXPORT_SYMBOL_GPL(crypto_unregister_algs); +  int crypto_register_template(struct crypto_template *tmpl)  {  	struct crypto_template *q; diff --git a/include/linux/crypto.h b/include/linux/crypto.h index a8fa6541b86..48ce5479386 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h @@ -314,6 +314,8 @@ struct crypto_alg {   */  int crypto_register_alg(struct crypto_alg *alg);  int crypto_unregister_alg(struct crypto_alg *alg); +int crypto_register_algs(struct crypto_alg *algs, int count); +int crypto_unregister_algs(struct crypto_alg *algs, int count);  /*   * Algorithm query interface.  |