// SPDX-License-Identifier: GPL-2.0-only/* * Copyright (C) 2012 Red Hat, Inc. * * Author: Mikulas Patocka <mpatocka@redhat.com> * * Based on Chromium dm-verity driver (C) 2011 The Chromium OS Authors * * In the file "/sys/module/dm_verity/parameters/prefetch_cluster" you can set * default prefetch value. Data are read in "prefetch_cluster" chunks from the * hash device. Setting this greatly improves performance when data and hash * are on the same disk on different partitions on devices with poor random * access behavior. */#include"dm-verity.h"#include"dm-verity-fec.h"#include"dm-verity-verify-sig.h"#include"dm-audit.h"#include<linux/module.h>#include<linux/reboot.h>#include<linux/scatterlist.h>#include<linux/string.h>#include<linux/jump_label.h>#define DM_MSG_PREFIX "verity"#define DM_VERITY_ENV_LENGTH 42#define DM_VERITY_ENV_VAR_NAME "DM_VERITY_ERR_BLOCK_NR"#define DM_VERITY_DEFAULT_PREFETCH_SIZE 262144#define DM_VERITY_MAX_CORRUPTED_ERRS 100#define DM_VERITY_OPT_LOGGING "ignore_corruption"#define DM_VERITY_OPT_RESTART "restart_on_corruption"#define DM_VERITY_OPT_PANIC "panic_on_corruption"#define DM_VERITY_OPT_IGN_ZEROES "ignore_zero_blocks"#define DM_VERITY_OPT_AT_MOST_ONCE "check_at_most_once"#define DM_VERITY_OPT_TASKLET_VERIFY "try_verify_in_tasklet"#define DM_VERITY_OPTS_MAX (4 + DM_VERITY_OPTS_FEC + \ DM_VERITY_ROOT_HASH_VERIFICATION_OPTS)staticunsignedintdm_verity_prefetch_cluster=