diff -drupN a/security/fivm/fivm.h b/security/fivm/fivm.h --- a/security/fivm/fivm.h 1970-01-01 03:00:00.000000000 +0300 +++ b/security/fivm/fivm.h 2022-06-12 05:28:14.000000000 +0300 @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2014 Allwinner Ltd. + * + * Author: + * Ryan Chen + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + * + * File: fima.h + * File Integrity Measurement Architecture definitions + */ + +#ifndef __LINUX_FIMA_H +#define __LINUX_FIMA_H + +#include +#include +#include +#include + +/*FIMV LKM debug mode +*#define FIVM_LKM_DEBUG +*#define FIVM_DEBUG_TIMMNG +*/ + +extern int fivm_debug; +#undef dprintk +#define dprintk(format, arg...) \ + do {\ + if (fivm_debug) \ + printk(KERN_DEBUG "%s: " format,\ + __func__, ##arg);\ + } while (0) + +#define fprintk(format, arg...) \ + do {\ + if (fivm_debug)\ + printk(format, ##arg); \ + } while (0) + +#define derr(format, arg...) \ + do {\ + printk(KERN_ERR "%s: " format,\ + __func__, ## arg);\ + } while (0) + +#define SHA256_DIGEST_LENGTH 32 +#define SHA512_DIGEST_LENGTH 64 +#define SHA_DIG_MAX SHA512_DIGEST_LENGTH + +#define RSA2048_SIG_LENGTH 256 +#define RSA3072_SIG_LENGTH 384 +#define RSA_SIG_MAX RSA3072_SIG_LENGTH + +#define FILE_NAME_LEN 512 +#define DIR_MAX_FILE_NUM 10000 +#define DIR_BITMAP_BYTES (DIR_MAX_FILE_NUM / 8) +#define BLK_SIZE 4096 +#define FILE_SIG_MAGIC 0x78381729 + +struct FILE_LIST_HEAD { + unsigned int magic; + unsigned int version; + unsigned char sha_alg[8]; + unsigned char sig[RSA_SIG_MAX]; + unsigned char root_dir[64]; + unsigned int file_cnt; + unsigned int file_name_len; + unsigned int reserved[4]; +}; + +struct FILE_SIG_HEAD { + unsigned char sig[RSA_SIG_MAX]; + unsigned int magic; + char sha_alg[8]; + char rsa_alg[8]; + unsigned char root_dir[64]; + unsigned int total_len; + unsigned int actual_cnt; /*actual file count*/ +}; +struct FILE_SIG { + unsigned int crc;/*name crc*/ + unsigned int flag; + unsigned char sha[SHA_DIG_MAX]; + unsigned int name_len; + unsigned char name[FILE_NAME_LEN]; +}; + +#ifdef CONFIG_COMPAT +struct fivm_param_t32 { + compat_uptr_t sig_head; + compat_size_t sig_head_size; + compat_uptr_t sig_table; + compat_size_t sig_table_size; +}; +#endif + +struct fivm_param { + void *sig_head; + unsigned int sig_head_size; + void *sig_table; + unsigned int sig_table_size; +}; + +enum { + FIVM_FULL_PATH = 1, + FIVM_PART_PATH, + FIVM_FAIL_PATH +}; + +struct fivm_path { + char *path; + int flag; +}; + +#define MAX_NAME_LEN 64 +int fivm_init(void); +int fivm_cleanup(void); +int fivm_enable(void); +int fivm_set(void *); +int fivm_disable(void); + +int fivm_calc_hash(struct file *file, char *digest); +int fivm_cleanup(void); +#endif