1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * fs/verity/init.c: fs-verity module initialization and logging 4 * 5 * Copyright 2019 Google LLC 6 */ 7 8 #include "fsverity_private.h" 9 10 #include <linux/ratelimit.h> 11 12 void fsverity_msg(const struct inode *inode, const char *level, 13 const char *fmt, ...) 14 { 15 static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL, 16 DEFAULT_RATELIMIT_BURST); 17 struct va_format vaf; 18 va_list args; 19 20 if (!__ratelimit(&rs)) 21 return; 22 23 va_start(args, fmt); 24 vaf.fmt = fmt; 25 vaf.va = &args; 26 if (inode) 27 printk("%sfs-verity (%s, inode %lu): %pV\n", 28 level, inode->i_sb->s_id, inode->i_ino, &vaf); 29 else 30 printk("%sfs-verity: %pV\n", level, &vaf); 31 va_end(args); 32 } 33 34 static int __init fsverity_init(void) 35 { 36 int err; 37 38 fsverity_check_hash_algs(); 39 40 err = fsverity_init_info_cache(); 41 if (err) 42 return err; 43 44 err = fsverity_init_workqueue(); 45 if (err) 46 goto err_exit_info_cache; 47 48 err = fsverity_init_signature(); 49 if (err) 50 goto err_exit_workqueue; 51 52 pr_debug("Initialized fs-verity\n"); 53 return 0; 54 55 err_exit_workqueue: 56 fsverity_exit_workqueue(); 57 err_exit_info_cache: 58 fsverity_exit_info_cache(); 59 return err; 60 } 61 late_initcall(fsverity_init) 62