summaryrefslogtreecommitdiffstats
path: root/security/smack/smack_lsm.c
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2019-08-21 22:54:41 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-10-07 18:59:40 +0200
commit069a73c9344775f29302180adf377b0ccfe295be (patch)
tree7661cfa822e2d634a847fc71963b412c3c9cb1df /security/smack/smack_lsm.c
parent73cf33180fd5786b83fb1fd469a41c8293f4c7ca (diff)
downloadlinux-stable-069a73c9344775f29302180adf377b0ccfe295be.tar.gz
linux-stable-069a73c9344775f29302180adf377b0ccfe295be.tar.bz2
linux-stable-069a73c9344775f29302180adf377b0ccfe295be.zip
smack: use GFP_NOFS while holding inode_smack::smk_lock
commit e5bfad3d7acc5702f32aafeb388362994f4d7bd0 upstream. inode_smack::smk_lock is taken during smack_d_instantiate(), which is called during a filesystem transaction when creating a file on ext4. Therefore to avoid a deadlock, all code that takes this lock must use GFP_NOFS, to prevent memory reclaim from waiting for the filesystem transaction to complete. Reported-by: syzbot+0eefc1e06a77d327a056@syzkaller.appspotmail.com Cc: stable@vger.kernel.org Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Casey Schaufler <casey@schaufler-ca.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'security/smack/smack_lsm.c')
-rw-r--r--security/smack/smack_lsm.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index 4777e3eb3ae8..36b6b9d4cbaf 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -288,7 +288,7 @@ static struct smack_known *smk_fetch(const char *name, struct inode *ip,
if (!(ip->i_opflags & IOP_XATTR))
return ERR_PTR(-EOPNOTSUPP);
- buffer = kzalloc(SMK_LONGLABEL, GFP_KERNEL);
+ buffer = kzalloc(SMK_LONGLABEL, GFP_NOFS);
if (buffer == NULL)
return ERR_PTR(-ENOMEM);