Apply Crypto API wrappers to the exported crypto symbol in CONFIG_CRYPTO_USER_API-related crypto to convert them into pluggable interface.
Signed-off-by: Jay Wang <[email protected]> --- crypto/Makefile | 2 +- crypto/af_alg.c | 4 +- crypto/fips140/fips140-api.c | 25 +++++++++++ include/crypto/if_alg.h | 84 ++++++++++++++++++++++++++---------- 4 files changed, 89 insertions(+), 26 deletions(-) diff --git a/crypto/Makefile b/crypto/Makefile index 623651445612..5c363d865b45 100644 --- a/crypto/Makefile +++ b/crypto/Makefile @@ -172,7 +172,7 @@ jitterentropy_rng-y := jitterentropy.o jitterentropy-kcapi.o obj-$(CONFIG_CRYPTO_JITTERENTROPY_TESTINTERFACE) += jitterentropy-testing.o obj-$(CONFIG_CRYPTO_BENCHMARK) += tcrypt.o crypto-objs-$(CONFIG_CRYPTO_GHASH) += ghash-generic.o -obj-$(CONFIG_CRYPTO_USER_API) += af_alg.o +crypto-objs-$(CONFIG_CRYPTO_USER_API) += af_alg.o obj-$(CONFIG_CRYPTO_USER_API_HASH) += algif_hash.o obj-$(CONFIG_CRYPTO_USER_API_SKCIPHER) += algif_skcipher.o obj-$(CONFIG_CRYPTO_USER_API_RNG) += algif_rng.o diff --git a/crypto/af_alg.c b/crypto/af_alg.c index e468714f539d..48ce5a420fed 100644 --- a/crypto/af_alg.c +++ b/crypto/af_alg.c @@ -1322,8 +1322,8 @@ static void __exit af_alg_exit(void) proto_unregister(&alg_proto); } -module_init(af_alg_init); -module_exit(af_alg_exit); +crypto_module_init(af_alg_init); +crypto_module_exit(af_alg_exit); MODULE_DESCRIPTION("Crypto userspace interface"); MODULE_LICENSE("GPL"); MODULE_ALIAS_NETPROTO(AF_ALG); diff --git a/crypto/fips140/fips140-api.c b/crypto/fips140/fips140-api.c index f6d6a6e79a9e..e20c9601637a 100644 --- a/crypto/fips140/fips140-api.c +++ b/crypto/fips140/fips140-api.c @@ -738,3 +738,28 @@ DEFINE_CRYPTO_API_STUB(__cast6_encrypt); DEFINE_CRYPTO_API_STUB(__cast6_decrypt); #endif +/* + * crypto/af_alg.c + */ +#if IS_BUILTIN(CONFIG_CRYPTO_USER_API) + +#include <crypto/if_alg.h> + +DEFINE_CRYPTO_API_STUB(af_alg_register_type); +DEFINE_CRYPTO_API_STUB(af_alg_unregister_type); +DEFINE_CRYPTO_API_STUB(af_alg_release); +DEFINE_CRYPTO_API_STUB(af_alg_release_parent); +DEFINE_CRYPTO_API_STUB(af_alg_accept); +DEFINE_CRYPTO_API_STUB(af_alg_free_sg); +DEFINE_CRYPTO_API_STUB(af_alg_count_tsgl); +DEFINE_CRYPTO_API_STUB(af_alg_pull_tsgl); +DEFINE_CRYPTO_API_STUB(af_alg_wmem_wakeup); +DEFINE_CRYPTO_API_STUB(af_alg_wait_for_data); +DEFINE_CRYPTO_API_STUB(af_alg_sendmsg); +DEFINE_CRYPTO_API_STUB(af_alg_free_resources); +DEFINE_CRYPTO_API_STUB(af_alg_async_cb); +DEFINE_CRYPTO_API_STUB(af_alg_poll); +DEFINE_CRYPTO_API_STUB(af_alg_alloc_areq); +DEFINE_CRYPTO_API_STUB(af_alg_get_rsgl); + +#endif diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h index 107b797c33ec..1c5f2ed140ea 100644 --- a/include/crypto/if_alg.h +++ b/include/crypto/if_alg.h @@ -8,6 +8,7 @@ #ifndef _CRYPTO_IF_ALG_H #define _CRYPTO_IF_ALG_H +#include <crypto/api.h> #include <linux/compiler.h> #include <linux/completion.h> #include <linux/if_alg.h> @@ -163,15 +164,29 @@ struct af_alg_ctx { unsigned int inflight; }; -int af_alg_register_type(const struct af_alg_type *type); -int af_alg_unregister_type(const struct af_alg_type *type); +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_register_type, int, + (const struct af_alg_type *type), + (type)); -int af_alg_release(struct socket *sock); -void af_alg_release_parent(struct sock *sk); -int af_alg_accept(struct sock *sk, struct socket *newsock, - struct proto_accept_arg *arg); +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_unregister_type, int, + (const struct af_alg_type *type), + (type)); -void af_alg_free_sg(struct af_alg_sgl *sgl); +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_release, int, + (struct socket *sock), + (sock)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_release_parent, void, + (struct sock *sk), + (sk)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_accept, int, + (struct sock *sk, struct socket *newsock, struct proto_accept_arg *arg), + (sk, newsock, arg)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_free_sg, void, + (struct af_alg_sgl *sgl), + (sgl)); static inline struct alg_sock *alg_sk(struct sock *sk) { @@ -230,21 +245,44 @@ static inline bool af_alg_readable(struct sock *sk) return PAGE_SIZE <= af_alg_rcvbuf(sk); } -unsigned int af_alg_count_tsgl(struct sock *sk, size_t bytes, size_t offset); -void af_alg_pull_tsgl(struct sock *sk, size_t used, struct scatterlist *dst, - size_t dst_offset); -void af_alg_wmem_wakeup(struct sock *sk); -int af_alg_wait_for_data(struct sock *sk, unsigned flags, unsigned min); -int af_alg_sendmsg(struct socket *sock, struct msghdr *msg, size_t size, - unsigned int ivsize); -void af_alg_free_resources(struct af_alg_async_req *areq); -void af_alg_async_cb(void *data, int err); -__poll_t af_alg_poll(struct file *file, struct socket *sock, - poll_table *wait); -struct af_alg_async_req *af_alg_alloc_areq(struct sock *sk, - unsigned int areqlen); -int af_alg_get_rsgl(struct sock *sk, struct msghdr *msg, int flags, - struct af_alg_async_req *areq, size_t maxsize, - size_t *outlen); +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_count_tsgl, unsigned int, + (struct sock *sk, size_t bytes, size_t offset), + (sk, bytes, offset)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_pull_tsgl, void, + (struct sock *sk, size_t used, struct scatterlist *dst, size_t dst_offset), + (sk, used, dst, dst_offset)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_wmem_wakeup, void, + (struct sock *sk), + (sk)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_wait_for_data, int, + (struct sock *sk, unsigned flags, unsigned min), + (sk, flags, min)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_sendmsg, int, + (struct socket *sock, struct msghdr *msg, size_t size, unsigned int ivsize), + (sock, msg, size, ivsize)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_free_resources, void, + (struct af_alg_async_req *areq), + (areq)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_async_cb, void, + (void *data, int err), + (data, err)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_poll, __poll_t, + (struct file *file, struct socket *sock, poll_table *wait), + (file, sock, wait)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_alloc_areq, struct af_alg_async_req *, + (struct sock *sk, unsigned int areqlen), + (sk, areqlen)); + +DECLARE_CRYPTO_API(CONFIG_CRYPTO_USER_API, af_alg_get_rsgl, int, + (struct sock *sk, struct msghdr *msg, int flags, struct af_alg_async_req *areq, size_t maxsize, size_t *outlen), + (sk, msg, flags, areq, maxsize, outlen)); #endif /* _CRYPTO_IF_ALG_H */ -- 2.47.3
