2008-08-05 10:13:08 +04:00
/*
* FIPS 200 support .
*
* Copyright ( c ) 2008 Neil Horman < nhorman @ tuxdriver . com >
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation ; either version 2 of the License , or ( at your option )
* any later version .
*
*/
2015-04-22 08:25:54 +03:00
# include <linux/export.h>
# include <linux/fips.h>
# include <linux/init.h>
2015-04-22 08:25:56 +03:00
# include <linux/module.h>
2015-04-22 08:25:54 +03:00
# include <linux/kernel.h>
2015-04-22 08:25:56 +03:00
# include <linux/sysctl.h>
2008-08-05 10:13:08 +04:00
int fips_enabled ;
EXPORT_SYMBOL_GPL ( fips_enabled ) ;
/* Process kernel command-line parameter at boot time. fips=0 or fips=1 */
static int fips_enable ( char * str )
{
fips_enabled = ! ! simple_strtol ( str , NULL , 0 ) ;
printk ( KERN_INFO " fips mode: %s \n " ,
fips_enabled ? " enabled " : " disabled " ) ;
return 1 ;
}
__setup ( " fips= " , fips_enable ) ;
2015-04-22 08:25:56 +03:00
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 ) ;