|
@@ -18,6 +18,7 @@
|
|
|
#include <linux/security.h>
|
|
|
#include <linux/integrity.h>
|
|
|
#include <linux/ima.h>
|
|
|
+#include <linux/evm.h>
|
|
|
|
|
|
#define MAX_LSM_XATTR 1
|
|
|
|
|
@@ -580,9 +581,14 @@ int security_inode_getattr(struct vfsmount *mnt, struct dentry *dentry)
|
|
|
int security_inode_setxattr(struct dentry *dentry, const char *name,
|
|
|
const void *value, size_t size, int flags)
|
|
|
{
|
|
|
+ int ret;
|
|
|
+
|
|
|
if (unlikely(IS_PRIVATE(dentry->d_inode)))
|
|
|
return 0;
|
|
|
- return security_ops->inode_setxattr(dentry, name, value, size, flags);
|
|
|
+ ret = security_ops->inode_setxattr(dentry, name, value, size, flags);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ return evm_inode_setxattr(dentry, name, value, size);
|
|
|
}
|
|
|
|
|
|
void security_inode_post_setxattr(struct dentry *dentry, const char *name,
|
|
@@ -591,6 +597,7 @@ void security_inode_post_setxattr(struct dentry *dentry, const char *name,
|
|
|
if (unlikely(IS_PRIVATE(dentry->d_inode)))
|
|
|
return;
|
|
|
security_ops->inode_post_setxattr(dentry, name, value, size, flags);
|
|
|
+ evm_inode_post_setxattr(dentry, name, value, size);
|
|
|
}
|
|
|
|
|
|
int security_inode_getxattr(struct dentry *dentry, const char *name)
|
|
@@ -609,9 +616,14 @@ int security_inode_listxattr(struct dentry *dentry)
|
|
|
|
|
|
int security_inode_removexattr(struct dentry *dentry, const char *name)
|
|
|
{
|
|
|
+ int ret;
|
|
|
+
|
|
|
if (unlikely(IS_PRIVATE(dentry->d_inode)))
|
|
|
return 0;
|
|
|
- return security_ops->inode_removexattr(dentry, name);
|
|
|
+ ret = security_ops->inode_removexattr(dentry, name);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ return evm_inode_removexattr(dentry, name);
|
|
|
}
|
|
|
|
|
|
int security_inode_need_killpriv(struct dentry *dentry)
|