cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ima.h (5838B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2008 IBM Corporation
      4 * Author: Mimi Zohar <zohar@us.ibm.com>
      5 */
      6
      7#ifndef _LINUX_IMA_H
      8#define _LINUX_IMA_H
      9
     10#include <linux/kernel_read_file.h>
     11#include <linux/fs.h>
     12#include <linux/security.h>
     13#include <linux/kexec.h>
     14#include <crypto/hash_info.h>
     15struct linux_binprm;
     16
     17#ifdef CONFIG_IMA
     18extern enum hash_algo ima_get_current_hash_algo(void);
     19extern int ima_bprm_check(struct linux_binprm *bprm);
     20extern int ima_file_check(struct file *file, int mask);
     21extern void ima_post_create_tmpfile(struct user_namespace *mnt_userns,
     22				    struct inode *inode);
     23extern void ima_file_free(struct file *file);
     24extern int ima_file_mmap(struct file *file, unsigned long prot);
     25extern int ima_file_mprotect(struct vm_area_struct *vma, unsigned long prot);
     26extern int ima_load_data(enum kernel_load_data_id id, bool contents);
     27extern int ima_post_load_data(char *buf, loff_t size,
     28			      enum kernel_load_data_id id, char *description);
     29extern int ima_read_file(struct file *file, enum kernel_read_file_id id,
     30			 bool contents);
     31extern int ima_post_read_file(struct file *file, void *buf, loff_t size,
     32			      enum kernel_read_file_id id);
     33extern void ima_post_path_mknod(struct user_namespace *mnt_userns,
     34				struct dentry *dentry);
     35extern int ima_file_hash(struct file *file, char *buf, size_t buf_size);
     36extern int ima_inode_hash(struct inode *inode, char *buf, size_t buf_size);
     37extern void ima_kexec_cmdline(int kernel_fd, const void *buf, int size);
     38extern int ima_measure_critical_data(const char *event_label,
     39				     const char *event_name,
     40				     const void *buf, size_t buf_len,
     41				     bool hash, u8 *digest, size_t digest_len);
     42
     43#ifdef CONFIG_IMA_APPRAISE_BOOTPARAM
     44extern void ima_appraise_parse_cmdline(void);
     45#else
     46static inline void ima_appraise_parse_cmdline(void) {}
     47#endif
     48
     49#ifdef CONFIG_IMA_KEXEC
     50extern void ima_add_kexec_buffer(struct kimage *image);
     51#endif
     52
     53#else
     54static inline enum hash_algo ima_get_current_hash_algo(void)
     55{
     56	return HASH_ALGO__LAST;
     57}
     58
     59static inline int ima_bprm_check(struct linux_binprm *bprm)
     60{
     61	return 0;
     62}
     63
     64static inline int ima_file_check(struct file *file, int mask)
     65{
     66	return 0;
     67}
     68
     69static inline void ima_post_create_tmpfile(struct user_namespace *mnt_userns,
     70					   struct inode *inode)
     71{
     72}
     73
     74static inline void ima_file_free(struct file *file)
     75{
     76	return;
     77}
     78
     79static inline int ima_file_mmap(struct file *file, unsigned long prot)
     80{
     81	return 0;
     82}
     83
     84static inline int ima_file_mprotect(struct vm_area_struct *vma,
     85				    unsigned long prot)
     86{
     87	return 0;
     88}
     89
     90static inline int ima_load_data(enum kernel_load_data_id id, bool contents)
     91{
     92	return 0;
     93}
     94
     95static inline int ima_post_load_data(char *buf, loff_t size,
     96				     enum kernel_load_data_id id,
     97				     char *description)
     98{
     99	return 0;
    100}
    101
    102static inline int ima_read_file(struct file *file, enum kernel_read_file_id id,
    103				bool contents)
    104{
    105	return 0;
    106}
    107
    108static inline int ima_post_read_file(struct file *file, void *buf, loff_t size,
    109				     enum kernel_read_file_id id)
    110{
    111	return 0;
    112}
    113
    114static inline void ima_post_path_mknod(struct user_namespace *mnt_userns,
    115				       struct dentry *dentry)
    116{
    117	return;
    118}
    119
    120static inline int ima_file_hash(struct file *file, char *buf, size_t buf_size)
    121{
    122	return -EOPNOTSUPP;
    123}
    124
    125static inline int ima_inode_hash(struct inode *inode, char *buf, size_t buf_size)
    126{
    127	return -EOPNOTSUPP;
    128}
    129
    130static inline void ima_kexec_cmdline(int kernel_fd, const void *buf, int size) {}
    131
    132static inline int ima_measure_critical_data(const char *event_label,
    133					     const char *event_name,
    134					     const void *buf, size_t buf_len,
    135					     bool hash, u8 *digest,
    136					     size_t digest_len)
    137{
    138	return -ENOENT;
    139}
    140
    141#endif /* CONFIG_IMA */
    142
    143#ifdef CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT
    144extern bool arch_ima_get_secureboot(void);
    145extern const char * const *arch_get_ima_policy(void);
    146#else
    147static inline bool arch_ima_get_secureboot(void)
    148{
    149	return false;
    150}
    151
    152static inline const char * const *arch_get_ima_policy(void)
    153{
    154	return NULL;
    155}
    156#endif
    157
    158#ifndef CONFIG_IMA_KEXEC
    159struct kimage;
    160
    161static inline void ima_add_kexec_buffer(struct kimage *image)
    162{}
    163#endif
    164
    165#ifdef CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS
    166extern void ima_post_key_create_or_update(struct key *keyring,
    167					  struct key *key,
    168					  const void *payload, size_t plen,
    169					  unsigned long flags, bool create);
    170#else
    171static inline void ima_post_key_create_or_update(struct key *keyring,
    172						 struct key *key,
    173						 const void *payload,
    174						 size_t plen,
    175						 unsigned long flags,
    176						 bool create) {}
    177#endif  /* CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS */
    178
    179#ifdef CONFIG_IMA_APPRAISE
    180extern bool is_ima_appraise_enabled(void);
    181extern void ima_inode_post_setattr(struct user_namespace *mnt_userns,
    182				   struct dentry *dentry);
    183extern int ima_inode_setxattr(struct dentry *dentry, const char *xattr_name,
    184		       const void *xattr_value, size_t xattr_value_len);
    185extern int ima_inode_removexattr(struct dentry *dentry, const char *xattr_name);
    186#else
    187static inline bool is_ima_appraise_enabled(void)
    188{
    189	return 0;
    190}
    191
    192static inline void ima_inode_post_setattr(struct user_namespace *mnt_userns,
    193					  struct dentry *dentry)
    194{
    195	return;
    196}
    197
    198static inline int ima_inode_setxattr(struct dentry *dentry,
    199				     const char *xattr_name,
    200				     const void *xattr_value,
    201				     size_t xattr_value_len)
    202{
    203	return 0;
    204}
    205
    206static inline int ima_inode_removexattr(struct dentry *dentry,
    207					const char *xattr_name)
    208{
    209	return 0;
    210}
    211#endif /* CONFIG_IMA_APPRAISE */
    212
    213#if defined(CONFIG_IMA_APPRAISE) && defined(CONFIG_INTEGRITY_TRUSTED_KEYRING)
    214extern bool ima_appraise_signature(enum kernel_read_file_id func);
    215#else
    216static inline bool ima_appraise_signature(enum kernel_read_file_id func)
    217{
    218	return false;
    219}
    220#endif /* CONFIG_IMA_APPRAISE && CONFIG_INTEGRITY_TRUSTED_KEYRING */
    221#endif /* _LINUX_IMA_H */