linux/fs/verity/init.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * 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
  12void 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
  34static 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
  55err_exit_workqueue:
  56        fsverity_exit_workqueue();
  57err_exit_info_cache:
  58        fsverity_exit_info_cache();
  59        return err;
  60}
  61late_initcall(fsverity_init)
  62