| /* SPDX-License-Identifier: GPL-2.0-only */ | |
| /* | |
| * Copyright (C) 2009 IBM Corporation | |
| * Author: Mimi Zohar <zohar@us.ibm.com> | |
| */ | |
| #ifndef _LINUX_INTEGRITY_H | |
| #define _LINUX_INTEGRITY_H | |
| #include <linux/fs.h> | |
| #include <linux/iversion.h> | |
| enum integrity_status { | |
| INTEGRITY_PASS = 0, | |
| INTEGRITY_PASS_IMMUTABLE, | |
| INTEGRITY_FAIL, | |
| INTEGRITY_FAIL_IMMUTABLE, | |
| INTEGRITY_NOLABEL, | |
| INTEGRITY_NOXATTRS, | |
| INTEGRITY_UNKNOWN, | |
| }; | |
| #ifdef CONFIG_INTEGRITY | |
| extern void __init integrity_load_keys(void); | |
| #else | |
| static inline void integrity_load_keys(void) | |
| { | |
| } | |
| #endif /* CONFIG_INTEGRITY */ | |
| /* An inode's attributes for detection of changes */ | |
| struct integrity_inode_attributes { | |
| u64 version; /* track inode changes */ | |
| unsigned long ino; | |
| dev_t dev; | |
| }; | |
| /* | |
| * On stacked filesystems the i_version alone is not enough to detect file data | |
| * or metadata change. Additional metadata is required. | |
| */ | |
| static inline void | |
| integrity_inode_attrs_store(struct integrity_inode_attributes *attrs, | |
| u64 i_version, const struct inode *inode) | |
| { | |
| attrs->version = i_version; | |
| attrs->dev = inode->i_sb->s_dev; | |
| attrs->ino = inode->i_ino; | |
| } | |
| /* | |
| * On stacked filesystems detect whether the inode or its content has changed. | |
| */ | |
| static inline bool | |
| integrity_inode_attrs_changed(const struct integrity_inode_attributes *attrs, | |
| const struct inode *inode) | |
| { | |
| return (inode->i_sb->s_dev != attrs->dev || | |
| inode->i_ino != attrs->ino || | |
| !inode_eq_iversion(inode, attrs->version)); | |
| } | |
| #endif /* _LINUX_INTEGRITY_H */ |