#include <linux/module.h>
#include <linux/crypto.h>
#include <linux/cryptouser.h>
#include <linux/sched.h>
#include <linux/security.h>
#include <net/netlink.h>
#include <net/net_namespace.h>
#include <net/sock.h>
#include <crypto/internal/skcipher.h>
#include <crypto/internal/rng.h>
#include <crypto/akcipher.h>
#include <crypto/kpp.h>
#include "internal.h"
#define null_terminated(x) …
static DEFINE_MUTEX(crypto_cfg_mutex);
struct crypto_dump_info { … };
static struct crypto_alg *crypto_alg_match(struct crypto_user_alg *p, int exact)
{ … }
static int crypto_report_cipher(struct sk_buff *skb, struct crypto_alg *alg)
{ … }
static int crypto_report_comp(struct sk_buff *skb, struct crypto_alg *alg)
{ … }
static int crypto_report_one(struct crypto_alg *alg,
struct crypto_user_alg *ualg, struct sk_buff *skb)
{ … }
static int crypto_report_alg(struct crypto_alg *alg,
struct crypto_dump_info *info)
{ … }
static int crypto_report(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,
struct nlattr **attrs)
{ … }
static int crypto_dump_report(struct sk_buff *skb, struct netlink_callback *cb)
{ … }
static int crypto_dump_report_done(struct netlink_callback *cb)
{ … }
static int crypto_update_alg(struct sk_buff *skb, struct nlmsghdr *nlh,
struct nlattr **attrs)
{ … }
static int crypto_del_alg(struct sk_buff *skb, struct nlmsghdr *nlh,
struct nlattr **attrs)
{ … }
static int crypto_add_alg(struct sk_buff *skb, struct nlmsghdr *nlh,
struct nlattr **attrs)
{ … }
static int crypto_del_rng(struct sk_buff *skb, struct nlmsghdr *nlh,
struct nlattr **attrs)
{ … }
static int crypto_reportstat(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,
struct nlattr **attrs)
{ … }
#define MSGSIZE …
static const int crypto_msg_min[CRYPTO_NR_MSGTYPES] = …;
static const struct nla_policy crypto_policy[CRYPTOCFGA_MAX+1] = …;
#undef MSGSIZE
static const struct crypto_link { … } crypto_dispatch[CRYPTO_NR_MSGTYPES] = …;
static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
struct netlink_ext_ack *extack)
{ … }
static void crypto_netlink_rcv(struct sk_buff *skb)
{ … }
static int __net_init crypto_netlink_init(struct net *net)
{ … }
static void __net_exit crypto_netlink_exit(struct net *net)
{ … }
static struct pernet_operations crypto_netlink_net_ops = …;
static int __init crypto_user_init(void)
{ … }
static void __exit crypto_user_exit(void)
{ … }
module_init(…) …;
module_exit(crypto_user_exit);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_ALIAS(…) …;