Commit 9aa867e4 authored by Herbert Xu's avatar Herbert Xu

crypto: user - Add CRYPTO_MSG_DELRNG

This patch adds a new crypto_user command that allows the admin to
delete the crypto system RNG.  Note that this can only be done if
the RNG is currently not in use.  The next time it is used a new
system RNG will be allocated.
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent d0497524
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <net/net_namespace.h> #include <net/net_namespace.h>
#include <crypto/internal/aead.h> #include <crypto/internal/aead.h>
#include <crypto/internal/skcipher.h> #include <crypto/internal/skcipher.h>
#include <crypto/internal/rng.h>
#include <crypto/akcipher.h> #include <crypto/akcipher.h>
#include "internal.h" #include "internal.h"
...@@ -472,13 +473,21 @@ static int crypto_add_alg(struct sk_buff *skb, struct nlmsghdr *nlh, ...@@ -472,13 +473,21 @@ static int crypto_add_alg(struct sk_buff *skb, struct nlmsghdr *nlh,
return 0; 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) #define MSGSIZE(type) sizeof(struct type)
static const int crypto_msg_min[CRYPTO_NR_MSGTYPES] = { static const int crypto_msg_min[CRYPTO_NR_MSGTYPES] = {
[CRYPTO_MSG_NEWALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg), [CRYPTO_MSG_NEWALG - CRYPTO_MSG_BASE] = MSGSIZE(crypto_user_alg),
[CRYPTO_MSG_DELALG - 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_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] = { static const struct nla_policy crypto_policy[CRYPTOCFGA_MAX+1] = {
...@@ -498,6 +507,7 @@ static const struct crypto_link { ...@@ -498,6 +507,7 @@ static const struct crypto_link {
[CRYPTO_MSG_GETALG - CRYPTO_MSG_BASE] = { .doit = crypto_report, [CRYPTO_MSG_GETALG - CRYPTO_MSG_BASE] = { .doit = crypto_report,
.dump = crypto_dump_report, .dump = crypto_dump_report,
.done = crypto_dump_report_done}, .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) static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
......
...@@ -25,6 +25,7 @@ enum { ...@@ -25,6 +25,7 @@ enum {
CRYPTO_MSG_DELALG, CRYPTO_MSG_DELALG,
CRYPTO_MSG_UPDATEALG, CRYPTO_MSG_UPDATEALG,
CRYPTO_MSG_GETALG, CRYPTO_MSG_GETALG,
CRYPTO_MSG_DELRNG,
__CRYPTO_MSG_MAX __CRYPTO_MSG_MAX
}; };
#define CRYPTO_MSG_MAX (__CRYPTO_MSG_MAX - 1) #define CRYPTO_MSG_MAX (__CRYPTO_MSG_MAX - 1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment