|
@@ -27,6 +27,7 @@
|
|
|
#include <net/net_namespace.h>
|
|
|
#include <crypto/internal/aead.h>
|
|
|
#include <crypto/internal/skcipher.h>
|
|
|
+#include <crypto/internal/rng.h>
|
|
|
#include <crypto/akcipher.h>
|
|
|
|
|
|
#include "internal.h"
|
|
@@ -472,13 +473,21 @@ static int crypto_add_alg(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int crypto_del_rng(struct sk_buff *skb, struct nlmsghdr *nlh,
|
|
|
+ struct nlattr **attrs)
|
|
|
+{
|
|
|
+ if (!netlink_capable(skb, CAP_NET_ADMIN))
|
|
|
+ return -EPERM;
|
|
|
+ return crypto_del_default_rng();
|
|
|
+}
|
|
|
+
|
|
|
#define MSGSIZE(type) sizeof(struct type)
|
|
|
|
|
|
static const int crypto_msg_min[CRYPTO_NR_MSGTYPES] = {
|
|
|
[CRYPTO_MSG_NEWALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg),
|
|
|
[CRYPTO_MSG_DELALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg),
|
|
|
[CRYPTO_MSG_UPDATEALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg),
|
|
|
- [CRYPTO_MSG_GETALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg),
|
|
|
+ [CRYPTO_MSG_DELRNG - CRYPTO_MSG_BASE] = 0,
|
|
|
};
|
|
|
|
|
|
static const struct nla_policy crypto_policy[CRYPTOCFGA_MAX+1] = {
|
|
@@ -498,6 +507,7 @@ static const struct crypto_link {
|
|
|
[CRYPTO_MSG_GETALG - CRYPTO_MSG_BASE] = { .doit = crypto_report,
|
|
|
.dump = crypto_dump_report,
|
|
|
.done = crypto_dump_report_done},
|
|
|
+ [CRYPTO_MSG_DELRNG - CRYPTO_MSG_BASE] = { .doit = crypto_del_rng },
|
|
|
};
|
|
|
|
|
|
static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
|