diff options
author | Mimi Zohar <zohar@linux.vnet.ibm.com> | 2011-03-09 14:39:18 -0500 |
---|---|---|
committer | Mimi Zohar <zohar@linux.vnet.ibm.com> | 2011-07-18 12:29:43 -0400 |
commit | c7b87de23b6fd5dfbe5c36601f29d6c515056343 (patch) | |
tree | ca33b4b1b11a03ce1c1975a2b272a1ed2bd0d36d | |
parent | 3e1be52d6c6b21d9080dd886c0e609e009831562 (diff) |
evm: evm_inode_post_removexattr
When an EVM protected extended attribute is removed, update 'security.evm'.
Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
Acked-by: Serge Hallyn <serge.hallyn@ubuntu.com>
-rw-r--r-- | fs/xattr.c | 5 | ||||
-rw-r--r-- | include/linux/evm.h | 9 |
2 files changed, 13 insertions, 1 deletions
diff --git a/fs/xattr.c b/fs/xattr.c index 851808c92b30..67583de8218c 100644 --- a/fs/xattr.c +++ b/fs/xattr.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/mount.h> | 14 | #include <linux/mount.h> |
15 | #include <linux/namei.h> | 15 | #include <linux/namei.h> |
16 | #include <linux/security.h> | 16 | #include <linux/security.h> |
17 | #include <linux/evm.h> | ||
17 | #include <linux/syscalls.h> | 18 | #include <linux/syscalls.h> |
18 | #include <linux/module.h> | 19 | #include <linux/module.h> |
19 | #include <linux/fsnotify.h> | 20 | #include <linux/fsnotify.h> |
@@ -301,8 +302,10 @@ vfs_removexattr(struct dentry *dentry, const char *name) | |||
301 | error = inode->i_op->removexattr(dentry, name); | 302 | error = inode->i_op->removexattr(dentry, name); |
302 | mutex_unlock(&inode->i_mutex); | 303 | mutex_unlock(&inode->i_mutex); |
303 | 304 | ||
304 | if (!error) | 305 | if (!error) { |
305 | fsnotify_xattr(dentry); | 306 | fsnotify_xattr(dentry); |
307 | evm_inode_post_removexattr(dentry, name); | ||
308 | } | ||
306 | return error; | 309 | return error; |
307 | } | 310 | } |
308 | EXPORT_SYMBOL_GPL(vfs_removexattr); | 311 | EXPORT_SYMBOL_GPL(vfs_removexattr); |
diff --git a/include/linux/evm.h b/include/linux/evm.h index 8b4e9e3b395e..a730782da563 100644 --- a/include/linux/evm.h +++ b/include/linux/evm.h | |||
@@ -22,6 +22,8 @@ extern void evm_inode_post_setxattr(struct dentry *dentry, | |||
22 | const void *xattr_value, | 22 | const void *xattr_value, |
23 | size_t xattr_value_len); | 23 | size_t xattr_value_len); |
24 | extern int evm_inode_removexattr(struct dentry *dentry, const char *xattr_name); | 24 | extern int evm_inode_removexattr(struct dentry *dentry, const char *xattr_name); |
25 | extern void evm_inode_post_removexattr(struct dentry *dentry, | ||
26 | const char *xattr_name); | ||
25 | #else | 27 | #else |
26 | #ifdef CONFIG_INTEGRITY | 28 | #ifdef CONFIG_INTEGRITY |
27 | static inline enum integrity_status evm_verifyxattr(struct dentry *dentry, | 29 | static inline enum integrity_status evm_verifyxattr(struct dentry *dentry, |
@@ -52,5 +54,12 @@ static inline int evm_inode_removexattr(struct dentry *dentry, | |||
52 | { | 54 | { |
53 | return 0; | 55 | return 0; |
54 | } | 56 | } |
57 | |||
58 | static inline void evm_inode_post_removexattr(struct dentry *dentry, | ||
59 | const char *xattr_name) | ||
60 | { | ||
61 | return; | ||
62 | } | ||
63 | |||
55 | #endif /* CONFIG_EVM_H */ | 64 | #endif /* CONFIG_EVM_H */ |
56 | #endif /* LINUX_EVM_H */ | 65 | #endif /* LINUX_EVM_H */ |