summaryrefslogtreecommitdiff
path: root/crypto/fips.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2015-04-22 13:25:56 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2015-04-23 14:18:09 +0800
commitb40d87c16063461ff1e32d06c813be310dae1792 (patch)
tree56eaa82b0f56e4c87442f5f21ac64cc314c31a2c /crypto/fips.c
parentaf2137a3f26457c6a8ee86d3b2e06905ecbfa9bf (diff)
downloadlinux-crypto-b40d87c16063461ff1e32d06c813be310dae1792.tar.gz
linux-crypto-b40d87c16063461ff1e32d06c813be310dae1792.zip
crypto: fips - Move fips_enabled sysctl into fips.c
There is currently a large ifdef FIPS code section in proc.c. Ostensibly it's there because the fips_enabled sysctl sits under /proc/sys/crypto. However, no other crypto sysctls exist. In fact, the whole ethos of the crypto API is against such user interfaces so this patch moves all the FIPS sysctl code over to fips.c. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/fips.c')
-rw-r--r--crypto/fips.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/crypto/fips.c b/crypto/fips.c
index 0f65df99..9d627c1c 100644
--- a/crypto/fips.c
+++ b/crypto/fips.c
@@ -13,7 +13,9 @@
#include <linux/export.h>
#include <linux/fips.h>
#include <linux/init.h>
+#include <linux/module.h>
#include <linux/kernel.h>
+#include <linux/sysctl.h>
int fips_enabled;
EXPORT_SYMBOL_GPL(fips_enabled);
@@ -28,3 +30,49 @@ static int fips_enable(char *str)
}
__setup("fips=", fips_enable);
+
+static struct ctl_table crypto_sysctl_table[] = {
+ {
+ .procname = "fips_enabled",
+ .data = &fips_enabled,
+ .maxlen = sizeof(int),
+ .mode = 0444,
+ .proc_handler = proc_dointvec
+ },
+ {}
+};
+
+static struct ctl_table crypto_dir_table[] = {
+ {
+ .procname = "crypto",
+ .mode = 0555,
+ .child = crypto_sysctl_table
+ },
+ {}
+};
+
+static struct ctl_table_header *crypto_sysctls;
+
+static void crypto_proc_fips_init(void)
+{
+ crypto_sysctls = register_sysctl_table(crypto_dir_table);
+}
+
+static void crypto_proc_fips_exit(void)
+{
+ unregister_sysctl_table(crypto_sysctls);
+}
+
+static int __init fips_init(void)
+{
+ crypto_proc_fips_init();
+ return 0;
+}
+
+static void __exit fips_exit(void)
+{
+ crypto_proc_fips_exit();
+}
+
+module_init(fips_init);
+module_exit(fips_exit);