Use CRYPTO_API() etc. from include/crypto/api.h in preparation for compilation as part of support for FIPS 140 standalone modules. Generated using: ./fipsify.py --config CONFIG_CRYPTO_RNG2 --source crypto/rng.c --header include/crypto/rng.h include/crypto/internal/rng.h Signed-off-by: Vegard Nossum <vegard.nossum@xxxxxxxxxx> --- crypto/fips140-api.c | 22 +++++++++++++++++++++ crypto/rng.c | 36 +++++++++++++++++------------------ include/crypto/internal/rng.h | 21 +++++++++++++++----- include/crypto/rng.h | 18 +++++++++++++----- 4 files changed, 69 insertions(+), 28 deletions(-) diff --git a/crypto/fips140-api.c b/crypto/fips140-api.c index 70b896ef42ff..8810af32dd43 100644 --- a/crypto/fips140-api.c +++ b/crypto/fips140-api.c @@ -466,3 +466,25 @@ DEFINE_CRYPTO_API_STUB(lskcipher_alloc_instance_simple); #endif +/* + * crypto/rng.c + */ +#if !IS_BUILTIN(CONFIG_CRYPTO_RNG2) + +#include <crypto/rng.h> + +DEFINE_CRYPTO_API_STUB(crypto_get_default_rng); +DEFINE_CRYPTO_API_STUB(crypto_put_default_rng); +DEFINE_CRYPTO_API_STUB(crypto_alloc_rng); +DEFINE_CRYPTO_API_STUB(crypto_rng_reset); + +#include <crypto/internal/rng.h> + +DEFINE_CRYPTO_API_STUB(crypto_register_rng); +DEFINE_CRYPTO_API_STUB(crypto_unregister_rng); +DEFINE_CRYPTO_API_STUB(crypto_register_rngs); +DEFINE_CRYPTO_API_STUB(crypto_unregister_rngs); +DEFINE_CRYPTO_API_STUB(crypto_del_default_rng); + +#endif + diff --git a/crypto/rng.c b/crypto/rng.c index 2a246e1a0918..66bbb976ac95 100644 --- a/crypto/rng.c +++ b/crypto/rng.c @@ -27,7 +27,7 @@ static DEFINE_MUTEX(crypto_default_rng_lock); static struct crypto_rng *crypto_default_rng; static int crypto_default_rng_refcnt; -int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int slen) +int CRYPTO_API(crypto_rng_reset)(struct crypto_rng *tfm, const u8 *seed, unsigned int slen) { u8 *buf = NULL; int err; @@ -48,7 +48,7 @@ int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int slen) kfree_sensitive(buf); return err; } -EXPORT_SYMBOL_GPL(crypto_rng_reset); +DEFINE_CRYPTO_API(crypto_rng_reset); static int crypto_rng_init_tfm(struct crypto_tfm *tfm) { @@ -100,13 +100,13 @@ static const struct crypto_type crypto_rng_type = { .algsize = offsetof(struct rng_alg, base), }; -struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask) +struct crypto_rng *CRYPTO_API(crypto_alloc_rng)(const char *alg_name, u32 type, u32 mask) { return crypto_alloc_tfm(alg_name, &crypto_rng_type, type, mask); } -EXPORT_SYMBOL_GPL(crypto_alloc_rng); +DEFINE_CRYPTO_API(crypto_alloc_rng); -int crypto_get_default_rng(struct crypto_rng **result) +int CRYPTO_API(crypto_get_default_rng)(struct crypto_rng **result) { struct crypto_rng *rng; int err; @@ -136,19 +136,19 @@ int crypto_get_default_rng(struct crypto_rng **result) return err; } -EXPORT_SYMBOL_GPL(crypto_get_default_rng); +DEFINE_CRYPTO_API(crypto_get_default_rng); -void crypto_put_default_rng(struct crypto_rng **rng) +void CRYPTO_API(crypto_put_default_rng)(struct crypto_rng **rng) { mutex_lock(&crypto_default_rng_lock); *rng = NULL; crypto_default_rng_refcnt--; mutex_unlock(&crypto_default_rng_lock); } -EXPORT_SYMBOL_GPL(crypto_put_default_rng); +DEFINE_CRYPTO_API(crypto_put_default_rng); #if defined(CONFIG_CRYPTO_RNG) || defined(CONFIG_CRYPTO_RNG_MODULE) -int crypto_del_default_rng(void) +int CRYPTO_API(crypto_del_default_rng)(void) { int err = -EBUSY; @@ -166,10 +166,10 @@ int crypto_del_default_rng(void) return err; } -EXPORT_SYMBOL_GPL(crypto_del_default_rng); +DEFINE_CRYPTO_API(crypto_del_default_rng); #endif -int crypto_register_rng(struct rng_alg *alg) +int CRYPTO_API(crypto_register_rng)(struct rng_alg *alg) { struct crypto_alg *base = &alg->base; @@ -182,15 +182,15 @@ int crypto_register_rng(struct rng_alg *alg) return crypto_register_alg(base); } -EXPORT_SYMBOL_GPL(crypto_register_rng); +DEFINE_CRYPTO_API(crypto_register_rng); -void crypto_unregister_rng(struct rng_alg *alg) +void CRYPTO_API(crypto_unregister_rng)(struct rng_alg *alg) { crypto_unregister_alg(&alg->base); } -EXPORT_SYMBOL_GPL(crypto_unregister_rng); +DEFINE_CRYPTO_API(crypto_unregister_rng); -int crypto_register_rngs(struct rng_alg *algs, int count) +int CRYPTO_API(crypto_register_rngs)(struct rng_alg *algs, int count) { int i, ret; @@ -208,16 +208,16 @@ int crypto_register_rngs(struct rng_alg *algs, int count) return ret; } -EXPORT_SYMBOL_GPL(crypto_register_rngs); +DEFINE_CRYPTO_API(crypto_register_rngs); -void crypto_unregister_rngs(struct rng_alg *algs, int count) +void CRYPTO_API(crypto_unregister_rngs)(struct rng_alg *algs, int count) { int i; for (i = count - 1; i >= 0; --i) crypto_unregister_rng(algs + i); } -EXPORT_SYMBOL_GPL(crypto_unregister_rngs); +DEFINE_CRYPTO_API(crypto_unregister_rngs); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Random Number Generator"); diff --git a/include/crypto/internal/rng.h b/include/crypto/internal/rng.h index e0711b6a597f..e4e4bbffc086 100644 --- a/include/crypto/internal/rng.h +++ b/include/crypto/internal/rng.h @@ -9,16 +9,27 @@ #ifndef _CRYPTO_INTERNAL_RNG_H #define _CRYPTO_INTERNAL_RNG_H +#include <crypto/api.h> #include <crypto/algapi.h> #include <crypto/rng.h> -int crypto_register_rng(struct rng_alg *alg); -void crypto_unregister_rng(struct rng_alg *alg); -int crypto_register_rngs(struct rng_alg *algs, int count); -void crypto_unregister_rngs(struct rng_alg *algs, int count); +DECLARE_CRYPTO_API(crypto_register_rng, int, + (struct rng_alg *alg), + (alg)); +DECLARE_CRYPTO_API(crypto_unregister_rng, void, + (struct rng_alg *alg), + (alg)); +DECLARE_CRYPTO_API(crypto_register_rngs, int, + (struct rng_alg *algs, int count), + (algs, count)); +DECLARE_CRYPTO_API(crypto_unregister_rngs, void, + (struct rng_alg *algs, int count), + (algs, count)); #if defined(CONFIG_CRYPTO_RNG) || defined(CONFIG_CRYPTO_RNG_MODULE) -int crypto_del_default_rng(void); +DECLARE_CRYPTO_API(crypto_del_default_rng, int, + (void), + ()); #else static inline int crypto_del_default_rng(void) { diff --git a/include/crypto/rng.h b/include/crypto/rng.h index 816f255adcd3..b7d7ff59d6a5 100644 --- a/include/crypto/rng.h +++ b/include/crypto/rng.h @@ -9,6 +9,7 @@ #ifndef _CRYPTO_RNG_H #define _CRYPTO_RNG_H +#include <crypto/api.h> #include <linux/atomic.h> #include <linux/container_of.h> #include <linux/crypto.h> @@ -57,8 +58,12 @@ struct crypto_rng { struct crypto_tfm base; }; -int crypto_get_default_rng(struct crypto_rng **rng); -void crypto_put_default_rng(struct crypto_rng **rng); +DECLARE_CRYPTO_API(crypto_get_default_rng, int, + (struct crypto_rng **rng), + (rng)); +DECLARE_CRYPTO_API(crypto_put_default_rng, void, + (struct crypto_rng **rng), + (rng)); /** * DOC: Random number generator API @@ -87,7 +92,9 @@ void crypto_put_default_rng(struct crypto_rng **rng); * Return: allocated cipher handle in case of success; IS_ERR() is true in case * of an error, PTR_ERR() returns the error code. */ -struct crypto_rng *crypto_alloc_rng(const char *alg_name, u32 type, u32 mask); +DECLARE_CRYPTO_API(crypto_alloc_rng, struct crypto_rng *, + (const char *alg_name, u32 type, u32 mask), + (alg_name, type, mask)); static inline struct crypto_tfm *crypto_rng_tfm(struct crypto_rng *tfm) { @@ -176,8 +183,9 @@ static inline int crypto_rng_get_bytes(struct crypto_rng *tfm, * * Return: 0 if the setting of the key was successful; < 0 if an error occurred */ -int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, - unsigned int slen); +DECLARE_CRYPTO_API(crypto_rng_reset, int, + (struct crypto_rng *tfm, const u8 *seed, unsigned int slen), + (tfm, seed, slen)); /** * crypto_rng_seedsize() - obtain seed size of RNG -- 2.39.3