diff options
Diffstat (limited to 'crypto/crypto_user_stat.c')
| -rw-r--r-- | crypto/crypto_user_stat.c | 183 | 
1 files changed, 12 insertions, 171 deletions
diff --git a/crypto/crypto_user_stat.c b/crypto/crypto_user_stat.c index 154884bf9275..d4f3d39b5137 100644 --- a/crypto/crypto_user_stat.c +++ b/crypto/crypto_user_stat.c @@ -6,18 +6,14 @@   *   */ -#include <linux/crypto.h> -#include <linux/cryptouser.h> -#include <linux/sched.h> +#include <crypto/algapi.h> +#include <crypto/internal/cryptouser.h> +#include <linux/errno.h> +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/string.h>  #include <net/netlink.h>  #include <net/sock.h> -#include <crypto/internal/skcipher.h> -#include <crypto/internal/rng.h> -#include <crypto/akcipher.h> -#include <crypto/kpp.h> -#include <crypto/internal/cryptouser.h> - -#include "internal.h"  #define null_terminated(x)	(strnlen(x, sizeof(x)) < sizeof(x)) @@ -28,23 +24,6 @@ struct crypto_dump_info {  	u16 nlmsg_flags;  }; -static int crypto_report_aead(struct sk_buff *skb, struct crypto_alg *alg) -{ -	struct crypto_stat_aead raead; - -	memset(&raead, 0, sizeof(raead)); - -	strscpy(raead.type, "aead", sizeof(raead.type)); - -	raead.stat_encrypt_cnt = atomic64_read(&alg->stats.aead.encrypt_cnt); -	raead.stat_encrypt_tlen = atomic64_read(&alg->stats.aead.encrypt_tlen); -	raead.stat_decrypt_cnt = atomic64_read(&alg->stats.aead.decrypt_cnt); -	raead.stat_decrypt_tlen = atomic64_read(&alg->stats.aead.decrypt_tlen); -	raead.stat_err_cnt = atomic64_read(&alg->stats.aead.err_cnt); - -	return nla_put(skb, CRYPTOCFGA_STAT_AEAD, sizeof(raead), &raead); -} -  static int crypto_report_cipher(struct sk_buff *skb, struct crypto_alg *alg)  {  	struct crypto_stat_cipher rcipher; @@ -53,12 +32,6 @@ static int crypto_report_cipher(struct sk_buff *skb, struct crypto_alg *alg)  	strscpy(rcipher.type, "cipher", sizeof(rcipher.type)); -	rcipher.stat_encrypt_cnt = atomic64_read(&alg->stats.cipher.encrypt_cnt); -	rcipher.stat_encrypt_tlen = atomic64_read(&alg->stats.cipher.encrypt_tlen); -	rcipher.stat_decrypt_cnt =  atomic64_read(&alg->stats.cipher.decrypt_cnt); -	rcipher.stat_decrypt_tlen = atomic64_read(&alg->stats.cipher.decrypt_tlen); -	rcipher.stat_err_cnt =  atomic64_read(&alg->stats.cipher.err_cnt); -  	return nla_put(skb, CRYPTOCFGA_STAT_CIPHER, sizeof(rcipher), &rcipher);  } @@ -69,112 +42,10 @@ static int crypto_report_comp(struct sk_buff *skb, struct crypto_alg *alg)  	memset(&rcomp, 0, sizeof(rcomp));  	strscpy(rcomp.type, "compression", sizeof(rcomp.type)); -	rcomp.stat_compress_cnt = atomic64_read(&alg->stats.compress.compress_cnt); -	rcomp.stat_compress_tlen = atomic64_read(&alg->stats.compress.compress_tlen); -	rcomp.stat_decompress_cnt = atomic64_read(&alg->stats.compress.decompress_cnt); -	rcomp.stat_decompress_tlen = atomic64_read(&alg->stats.compress.decompress_tlen); -	rcomp.stat_err_cnt = atomic64_read(&alg->stats.compress.err_cnt);  	return nla_put(skb, CRYPTOCFGA_STAT_COMPRESS, sizeof(rcomp), &rcomp);  } -static int crypto_report_acomp(struct sk_buff *skb, struct crypto_alg *alg) -{ -	struct crypto_stat_compress racomp; - -	memset(&racomp, 0, sizeof(racomp)); - -	strscpy(racomp.type, "acomp", sizeof(racomp.type)); -	racomp.stat_compress_cnt = atomic64_read(&alg->stats.compress.compress_cnt); -	racomp.stat_compress_tlen = atomic64_read(&alg->stats.compress.compress_tlen); -	racomp.stat_decompress_cnt =  atomic64_read(&alg->stats.compress.decompress_cnt); -	racomp.stat_decompress_tlen = atomic64_read(&alg->stats.compress.decompress_tlen); -	racomp.stat_err_cnt = atomic64_read(&alg->stats.compress.err_cnt); - -	return nla_put(skb, CRYPTOCFGA_STAT_ACOMP, sizeof(racomp), &racomp); -} - -static int crypto_report_akcipher(struct sk_buff *skb, struct crypto_alg *alg) -{ -	struct crypto_stat_akcipher rakcipher; - -	memset(&rakcipher, 0, sizeof(rakcipher)); - -	strscpy(rakcipher.type, "akcipher", sizeof(rakcipher.type)); -	rakcipher.stat_encrypt_cnt = atomic64_read(&alg->stats.akcipher.encrypt_cnt); -	rakcipher.stat_encrypt_tlen = atomic64_read(&alg->stats.akcipher.encrypt_tlen); -	rakcipher.stat_decrypt_cnt = atomic64_read(&alg->stats.akcipher.decrypt_cnt); -	rakcipher.stat_decrypt_tlen = atomic64_read(&alg->stats.akcipher.decrypt_tlen); -	rakcipher.stat_sign_cnt = atomic64_read(&alg->stats.akcipher.sign_cnt); -	rakcipher.stat_verify_cnt = atomic64_read(&alg->stats.akcipher.verify_cnt); -	rakcipher.stat_err_cnt = atomic64_read(&alg->stats.akcipher.err_cnt); - -	return nla_put(skb, CRYPTOCFGA_STAT_AKCIPHER, -		       sizeof(rakcipher), &rakcipher); -} - -static int crypto_report_kpp(struct sk_buff *skb, struct crypto_alg *alg) -{ -	struct crypto_stat_kpp rkpp; - -	memset(&rkpp, 0, sizeof(rkpp)); - -	strscpy(rkpp.type, "kpp", sizeof(rkpp.type)); - -	rkpp.stat_setsecret_cnt = atomic64_read(&alg->stats.kpp.setsecret_cnt); -	rkpp.stat_generate_public_key_cnt = atomic64_read(&alg->stats.kpp.generate_public_key_cnt); -	rkpp.stat_compute_shared_secret_cnt = atomic64_read(&alg->stats.kpp.compute_shared_secret_cnt); -	rkpp.stat_err_cnt = atomic64_read(&alg->stats.kpp.err_cnt); - -	return nla_put(skb, CRYPTOCFGA_STAT_KPP, sizeof(rkpp), &rkpp); -} - -static int crypto_report_ahash(struct sk_buff *skb, struct crypto_alg *alg) -{ -	struct crypto_stat_hash rhash; - -	memset(&rhash, 0, sizeof(rhash)); - -	strscpy(rhash.type, "ahash", sizeof(rhash.type)); - -	rhash.stat_hash_cnt = atomic64_read(&alg->stats.hash.hash_cnt); -	rhash.stat_hash_tlen = atomic64_read(&alg->stats.hash.hash_tlen); -	rhash.stat_err_cnt = atomic64_read(&alg->stats.hash.err_cnt); - -	return nla_put(skb, CRYPTOCFGA_STAT_HASH, sizeof(rhash), &rhash); -} - -static int crypto_report_shash(struct sk_buff *skb, struct crypto_alg *alg) -{ -	struct crypto_stat_hash rhash; - -	memset(&rhash, 0, sizeof(rhash)); - -	strscpy(rhash.type, "shash", sizeof(rhash.type)); - -	rhash.stat_hash_cnt =  atomic64_read(&alg->stats.hash.hash_cnt); -	rhash.stat_hash_tlen = atomic64_read(&alg->stats.hash.hash_tlen); -	rhash.stat_err_cnt = atomic64_read(&alg->stats.hash.err_cnt); - -	return nla_put(skb, CRYPTOCFGA_STAT_HASH, sizeof(rhash), &rhash); -} - -static int crypto_report_rng(struct sk_buff *skb, struct crypto_alg *alg) -{ -	struct crypto_stat_rng rrng; - -	memset(&rrng, 0, sizeof(rrng)); - -	strscpy(rrng.type, "rng", sizeof(rrng.type)); - -	rrng.stat_generate_cnt = atomic64_read(&alg->stats.rng.generate_cnt); -	rrng.stat_generate_tlen = atomic64_read(&alg->stats.rng.generate_tlen); -	rrng.stat_seed_cnt = atomic64_read(&alg->stats.rng.seed_cnt); -	rrng.stat_err_cnt = atomic64_read(&alg->stats.rng.err_cnt); - -	return nla_put(skb, CRYPTOCFGA_STAT_RNG, sizeof(rrng), &rrng); -} -  static int crypto_reportstat_one(struct crypto_alg *alg,  				 struct crypto_user_alg *ualg,  				 struct sk_buff *skb) @@ -204,15 +75,13 @@ static int crypto_reportstat_one(struct crypto_alg *alg,  		goto out;  	} -	switch (alg->cra_flags & (CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_LARVAL)) { -	case CRYPTO_ALG_TYPE_AEAD: -		if (crypto_report_aead(skb, alg)) +	if (alg->cra_type && alg->cra_type->report_stat) { +		if (alg->cra_type->report_stat(skb, alg))  			goto nla_put_failure; -		break; -	case CRYPTO_ALG_TYPE_SKCIPHER: -		if (crypto_report_cipher(skb, alg)) -			goto nla_put_failure; -		break; +		goto out; +	} + +	switch (alg->cra_flags & (CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_LARVAL)) {  	case CRYPTO_ALG_TYPE_CIPHER:  		if (crypto_report_cipher(skb, alg))  			goto nla_put_failure; @@ -221,34 +90,6 @@ static int crypto_reportstat_one(struct crypto_alg *alg,  		if (crypto_report_comp(skb, alg))  			goto nla_put_failure;  		break; -	case CRYPTO_ALG_TYPE_ACOMPRESS: -		if (crypto_report_acomp(skb, alg)) -			goto nla_put_failure; -		break; -	case CRYPTO_ALG_TYPE_SCOMPRESS: -		if (crypto_report_acomp(skb, alg)) -			goto nla_put_failure; -		break; -	case CRYPTO_ALG_TYPE_AKCIPHER: -		if (crypto_report_akcipher(skb, alg)) -			goto nla_put_failure; -		break; -	case CRYPTO_ALG_TYPE_KPP: -		if (crypto_report_kpp(skb, alg)) -			goto nla_put_failure; -		break; -	case CRYPTO_ALG_TYPE_AHASH: -		if (crypto_report_ahash(skb, alg)) -			goto nla_put_failure; -		break; -	case CRYPTO_ALG_TYPE_HASH: -		if (crypto_report_shash(skb, alg)) -			goto nla_put_failure; -		break; -	case CRYPTO_ALG_TYPE_RNG: -		if (crypto_report_rng(skb, alg)) -			goto nla_put_failure; -		break;  	default:  		pr_err("ERROR: Unhandled alg %d in %s\n",  		       alg->cra_flags & (CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_LARVAL),  |