Re: crypto: fips - Move fips_enabled sysctl into fips.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am Mittwoch, 22. April 2015, 13:02:22 schrieb Herbert Xu:

Hi Herbert,

> 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@xxxxxxxxxxxxxxxxxxx>
> 
> diff --git a/crypto/fips.c b/crypto/fips.c
> index 0f65df9..9d627c1 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);
> diff --git a/crypto/proc.c b/crypto/proc.c
> index 4ffe73b..2cc10c9 100644
> --- a/crypto/proc.c
> +++ b/crypto/proc.c
> @@ -20,47 +20,8 @@
>  #include <linux/rwsem.h>
>  #include <linux/proc_fs.h>
>  #include <linux/seq_file.h>
> -#include <linux/sysctl.h>
>  #include "internal.h"
> 
> -#ifdef CONFIG_CRYPTO_FIPS
> -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)
> -{
> -	if (crypto_sysctls)
> -		unregister_sysctl_table(crypto_sysctls);
> -}
> -#else
> -#define crypto_proc_fips_init()
> -#define crypto_proc_fips_exit()
> -#endif
> -
>  static void *c_start(struct seq_file *m, loff_t *pos)
>  {
>  	down_read(&crypto_alg_sem);
> @@ -148,11 +109,9 @@ static const struct file_operations proc_crypto_ops = {
> void __init crypto_init_proc(void)
>  {
>  	proc_create("crypto", 0, NULL, &proc_crypto_ops);
> -	crypto_proc_fips_init();
>  }
> 
>  void __exit crypto_exit_proc(void)
>  {
> -	crypto_proc_fips_exit();
>  	remove_proc_entry("crypto", NULL);
>  }

With this removal of crypto_proc_fips_* from crypto_*_proc, wouldn't you have 
broken the link from algapi.c? There, crypto_*_proc is called where now the 
FIPS logic may not be initialized any more.


-- 
Ciao
Stephan
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Kernel]     [Gnu Classpath]     [Gnu Crypto]     [DM Crypt]     [Netfilter]     [Bugtraq]

  Powered by Linux