70 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * fs-verity module initialization and logging4 *5 * Copyright 2019 Google LLC6 */7 8#include "fsverity_private.h"9 10#include <linux/ratelimit.h>11 12#ifdef CONFIG_SYSCTL13static struct ctl_table fsverity_sysctl_table[] = {14#ifdef CONFIG_FS_VERITY_BUILTIN_SIGNATURES15 {16 .procname = "require_signatures",17 .data = &fsverity_require_signatures,18 .maxlen = sizeof(int),19 .mode = 0644,20 .proc_handler = proc_dointvec_minmax,21 .extra1 = SYSCTL_ZERO,22 .extra2 = SYSCTL_ONE,23 },24#endif25};26 27static void __init fsverity_init_sysctl(void)28{29 register_sysctl_init("fs/verity", fsverity_sysctl_table);30}31#else /* CONFIG_SYSCTL */32static inline void fsverity_init_sysctl(void)33{34}35#endif /* !CONFIG_SYSCTL */36 37void fsverity_msg(const struct inode *inode, const char *level,38 const char *fmt, ...)39{40 static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,41 DEFAULT_RATELIMIT_BURST);42 struct va_format vaf;43 va_list args;44 45 if (!__ratelimit(&rs))46 return;47 48 va_start(args, fmt);49 vaf.fmt = fmt;50 vaf.va = &args;51 if (inode)52 printk("%sfs-verity (%s, inode %lu): %pV\n",53 level, inode->i_sb->s_id, inode->i_ino, &vaf);54 else55 printk("%sfs-verity: %pV\n", level, &vaf);56 va_end(args);57}58 59static int __init fsverity_init(void)60{61 fsverity_check_hash_algs();62 fsverity_init_info_cache();63 fsverity_init_workqueue();64 fsverity_init_sysctl();65 fsverity_init_signature();66 fsverity_init_bpf();67 return 0;68}69late_initcall(fsverity_init)70