2019-07-22 09:26:21 -07:00
// SPDX-License-Identifier: GPL-2.0
/*
2020-11-13 13:19:15 -08:00
* fs - verity module initialization and logging
2019-07-22 09:26:21 -07:00
*
* Copyright 2019 Google LLC
*/
# include "fsverity_private.h"
# include <linux/ratelimit.h>
2023-07-05 14:27:43 -07:00
# ifdef CONFIG_SYSCTL
static struct ctl_table_header * fsverity_sysctl_header ;
static struct ctl_table fsverity_sysctl_table [ ] = {
# ifdef CONFIG_FS_VERITY_BUILTIN_SIGNATURES
{
. procname = " require_signatures " ,
. data = & fsverity_require_signatures ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec_minmax ,
. extra1 = SYSCTL_ZERO ,
. extra2 = SYSCTL_ONE ,
} ,
# endif
} ;
static void __init fsverity_init_sysctl ( void )
{
fsverity_sysctl_header = register_sysctl ( " fs/verity " ,
fsverity_sysctl_table ) ;
if ( ! fsverity_sysctl_header )
panic ( " fsverity sysctl registration failed " ) ;
}
# else /* CONFIG_SYSCTL */
static inline void fsverity_init_sysctl ( void )
{
}
# endif /* !CONFIG_SYSCTL */
2019-07-22 09:26:21 -07:00
void fsverity_msg ( const struct inode * inode , const char * level ,
const char * fmt , . . . )
{
static DEFINE_RATELIMIT_STATE ( rs , DEFAULT_RATELIMIT_INTERVAL ,
DEFAULT_RATELIMIT_BURST ) ;
struct va_format vaf ;
va_list args ;
if ( ! __ratelimit ( & rs ) )
return ;
va_start ( args , fmt ) ;
vaf . fmt = fmt ;
vaf . va = & args ;
if ( inode )
printk ( " %sfs-verity (%s, inode %lu): %pV \n " ,
level , inode - > i_sb - > s_id , inode - > i_ino , & vaf ) ;
else
printk ( " %sfs-verity: %pV \n " , level , & vaf ) ;
va_end ( args ) ;
}
static int __init fsverity_init ( void )
{
fsverity_check_hash_algs ( ) ;
2023-07-05 14:27:42 -07:00
fsverity_init_info_cache ( ) ;
fsverity_init_workqueue ( ) ;
2023-07-05 14:27:43 -07:00
fsverity_init_sysctl ( ) ;
2023-07-05 14:27:42 -07:00
fsverity_init_signature ( ) ;
2023-11-29 15:44:13 -08:00
fsverity_init_bpf ( ) ;
2019-07-22 09:26:21 -07:00
return 0 ;
}
late_initcall ( fsverity_init )