evm: don't copy up 'security.evm' xattr
authorMimi Zohar <zohar@linux.ibm.com>
Tue, 12 Dec 2023 11:12:43 +0000 (06:12 -0500)
committerMimi Zohar <zohar@linux.ibm.com>
Wed, 20 Dec 2023 12:39:52 +0000 (07:39 -0500)
The security.evm HMAC and the original file signatures contain
filesystem specific data.  As a result, the HMAC and signature
are not the same on the stacked and backing filesystems.

Don't copy up 'security.evm'.

Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
include/linux/evm.h
security/integrity/evm/evm_main.c
security/security.c

index 01fc495a83e27816088954955a3e56e6da470acf..36ec884320d9f5adab2ba5fc258ea0edc2b363ee 100644 (file)
@@ -31,6 +31,7 @@ extern void evm_inode_post_setxattr(struct dentry *dentry,
                                    const char *xattr_name,
                                    const void *xattr_value,
                                    size_t xattr_value_len);
+extern int evm_inode_copy_up_xattr(const char *name);
 extern int evm_inode_removexattr(struct mnt_idmap *idmap,
                                 struct dentry *dentry, const char *xattr_name);
 extern void evm_inode_post_removexattr(struct dentry *dentry,
@@ -117,6 +118,11 @@ static inline void evm_inode_post_setxattr(struct dentry *dentry,
        return;
 }
 
+static inline int  evm_inode_copy_up_xattr(const char *name)
+{
+       return 0;
+}
+
 static inline int evm_inode_removexattr(struct mnt_idmap *idmap,
                                        struct dentry *dentry,
                                        const char *xattr_name)
index 894570fe39bc530262abff3b0989679da7dfeef4..02adba635b02cbfe083fe9f193bb6890cc023f66 100644 (file)
@@ -863,6 +863,13 @@ void evm_inode_post_setattr(struct dentry *dentry, int ia_valid)
                evm_update_evmxattr(dentry, NULL, NULL, 0);
 }
 
+int evm_inode_copy_up_xattr(const char *name)
+{
+       if (strcmp(name, XATTR_NAME_EVM) == 0)
+               return 1; /* Discard */
+       return -EOPNOTSUPP;
+}
+
 /*
  * evm_inode_init_security - initializes security.evm HMAC value
  */
index dcb3e7014f9bdd4b6115f0407c5b1d7d3a588e9c..f00ec4d988b897d6f81d112f671396af3665ed71 100644 (file)
@@ -2539,7 +2539,7 @@ int security_inode_copy_up_xattr(const char *name)
                        return rc;
        }
 
-       return LSM_RET_DEFAULT(inode_copy_up_xattr);
+       return evm_inode_copy_up_xattr(name);
 }
 EXPORT_SYMBOL(security_inode_copy_up_xattr);