On Tue, Dec 19, 2023 at 3:49 PM Mimi Zohar <zohar@xxxxxxxxxxxxx> wrote: > > 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'. > > Signed-off-by: Mimi Zohar <zohar@xxxxxxxxxxxxx> > --- > include/linux/evm.h | 6 ++++++ > security/integrity/evm/evm_main.c | 7 +++++++ > security/security.c | 4 ++++ > 3 files changed, 17 insertions(+) > > diff --git a/include/linux/evm.h b/include/linux/evm.h > index 01fc495a83e2..36ec884320d9 100644 > --- a/include/linux/evm.h > +++ b/include/linux/evm.h > @@ -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) > diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c > index 894570fe39bc..02adba635b02 100644 > --- a/security/integrity/evm/evm_main.c > +++ b/security/integrity/evm/evm_main.c > @@ -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 > */ > diff --git a/security/security.c b/security/security.c > index dcb3e7014f9b..a02e78c45007 100644 > --- a/security/security.c > +++ b/security/security.c > @@ -2539,6 +2539,10 @@ int security_inode_copy_up_xattr(const char *name) > return rc; > } > > + rc = evm_inode_copy_up_xattr(name); > + if (rc != LSM_RET_DEFAULT(inode_copy_up_xattr)) > + return rc; > + > return LSM_RET_DEFAULT(inode_copy_up_xattr); The rest of the hooks call evm last, e.g.: return evm_inode_setattr(idmap, dentry, attr); return evm_inode_remove_acl(idmap, dentry, acl_name); evm_inode_post_setxattr(dentry, name, value, size); return evm_inode_removexattr(idmap, dentry, name); best keep a consistent LSM order. Other than that, feel free to add: Reviewed-by: Amir Goldstein <amir73il@xxxxxxxxx> Thanks, Amir.