forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
crypto: kpp - Count error stats differently
Move all stat code specific to kpp into the kpp code. While we're at it, change the stats so that bytes and counts are always incremented even in case of error. This allows the reference counting to be removed as we can now increment the counters prior to the operation. After the operation we simply increase the error count if necessary. This is safe as errors can only occur synchronously (or rather, the existing code already ignored asynchronous errors which are only visible to the callback function). Signed-off-by: Herbert Xu <[email protected]>
- Loading branch information
Showing
5 changed files
with
89 additions
and
101 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,19 +5,16 @@ | |
* Copyright (c) 2016, Intel Corporation | ||
* Authors: Salvatore Benedetto <[email protected]> | ||
*/ | ||
|
||
#include <crypto/internal/kpp.h> | ||
#include <linux/cryptouser.h> | ||
#include <linux/errno.h> | ||
#include <linux/kernel.h> | ||
#include <linux/module.h> | ||
#include <linux/seq_file.h> | ||
#include <linux/slab.h> | ||
#include <linux/string.h> | ||
#include <linux/crypto.h> | ||
#include <crypto/algapi.h> | ||
#include <linux/cryptouser.h> | ||
#include <linux/compiler.h> | ||
#include <net/netlink.h> | ||
#include <crypto/kpp.h> | ||
#include <crypto/internal/kpp.h> | ||
|
||
#include "internal.h" | ||
|
||
#ifdef CONFIG_NET | ||
|
@@ -75,6 +72,29 @@ static void crypto_kpp_free_instance(struct crypto_instance *inst) | |
kpp->free(kpp); | ||
} | ||
|
||
static int __maybe_unused crypto_kpp_report_stat( | ||
struct sk_buff *skb, struct crypto_alg *alg) | ||
{ | ||
struct kpp_alg *kpp = __crypto_kpp_alg(alg); | ||
struct crypto_istat_kpp *istat; | ||
struct crypto_stat_kpp rkpp; | ||
|
||
istat = kpp_get_stat(kpp); | ||
|
||
memset(&rkpp, 0, sizeof(rkpp)); | ||
|
||
strscpy(rkpp.type, "kpp", sizeof(rkpp.type)); | ||
|
||
rkpp.stat_setsecret_cnt = atomic64_read(&istat->setsecret_cnt); | ||
rkpp.stat_generate_public_key_cnt = | ||
atomic64_read(&istat->generate_public_key_cnt); | ||
rkpp.stat_compute_shared_secret_cnt = | ||
atomic64_read(&istat->compute_shared_secret_cnt); | ||
rkpp.stat_err_cnt = atomic64_read(&istat->err_cnt); | ||
|
||
return nla_put(skb, CRYPTOCFGA_STAT_KPP, sizeof(rkpp), &rkpp); | ||
} | ||
|
||
static const struct crypto_type crypto_kpp_type = { | ||
.extsize = crypto_alg_extsize, | ||
.init_tfm = crypto_kpp_init_tfm, | ||
|
@@ -83,6 +103,9 @@ static const struct crypto_type crypto_kpp_type = { | |
.show = crypto_kpp_show, | ||
#endif | ||
.report = crypto_kpp_report, | ||
#ifdef CONFIG_CRYPTO_STATS | ||
.report_stat = crypto_kpp_report_stat, | ||
#endif | ||
.maskclear = ~CRYPTO_ALG_TYPE_MASK, | ||
.maskset = CRYPTO_ALG_TYPE_MASK, | ||
.type = CRYPTO_ALG_TYPE_KPP, | ||
|
@@ -112,11 +135,15 @@ EXPORT_SYMBOL_GPL(crypto_has_kpp); | |
|
||
static void kpp_prepare_alg(struct kpp_alg *alg) | ||
{ | ||
struct crypto_istat_kpp *istat = kpp_get_stat(alg); | ||
struct crypto_alg *base = &alg->base; | ||
|
||
base->cra_type = &crypto_kpp_type; | ||
base->cra_flags &= ~CRYPTO_ALG_TYPE_MASK; | ||
base->cra_flags |= CRYPTO_ALG_TYPE_KPP; | ||
|
||
if (IS_ENABLED(CONFIG_CRYPTO_STATS)) | ||
memset(istat, 0, sizeof(*istat)); | ||
} | ||
|
||
int crypto_register_kpp(struct kpp_alg *alg) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters