path: root/security/apparmor/apparmorfs.c
diff options
authorJohn Johansen <>2020-01-02 05:31:22 -0800
committerJohn Johansen <>2020-01-04 15:56:44 -0800
commit8c62ed27a12c00e3db1c9f04bc0f272bdbb06734 (patch)
tree7bbe5954a3d15944b17e1cc732eb0f479276ffda /security/apparmor/apparmorfs.c
parent20d4e80d255dd7cfecb53743bc550ebcad04549d (diff)
apparmor: fix aa_xattrs_match() may sleep while holding a RCU lock
aa_xattrs_match() is unfortunately calling vfs_getxattr_alloc() from a context protected by an rcu_read_lock. This can not be done as vfs_getxattr_alloc() may sleep regardles of the gfp_t value being passed to it. Fix this by breaking the rcu_read_lock on the policy search when the xattr match feature is requested and restarting the search if a policy changes occur. Fixes: 8e51f9087f40 ("apparmor: Add support for attaching profiles via xattr, presence and value") Reported-by: Jia-Ju Bai <> Reported-by: Al Viro <> Signed-off-by: John Johansen <>
Diffstat (limited to 'security/apparmor/apparmorfs.c')
1 files changed, 1 insertions, 1 deletions
diff --git a/security/apparmor/apparmorfs.c b/security/apparmor/apparmorfs.c
index 09996f2552ee..47aff8700547 100644
--- a/security/apparmor/apparmorfs.c
+++ b/security/apparmor/apparmorfs.c
@@ -623,7 +623,7 @@ static __poll_t ns_revision_poll(struct file *file, poll_table *pt)
void __aa_bump_ns_revision(struct aa_ns *ns)
- ns->revision++;
+ WRITE_ONCE(ns->revision, ns->revision + 1);