| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Copyright (C) 2009 IBM Corporation |
| * Author: Mimi Zohar <[email protected]> |
| */ |
| |
| #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 */ |