From: Alexander Kozhevnikov <alexander.kozhevnikov@huawei.com>
To: <paul@paul-moore.com>
Cc: <alexander.kozhevnikov@huawei.com>, <artem.kuzin@huawei.com>,
<hw.likun@huawei.com>, <igor.baranov@huawei.com>,
<jamorris@linux.microsoft.com>,
<linux-security-module@vger.kernel.org>,
<selinux@vger.kernel.org>, <stephen.smalley.work@gmail.com>,
<xiujianfeng@huawei.com>, <yusongping@huawei.com>,
<anton.sirazetdinov@huawei.com>
Subject: [RFC PATCH 3/7] SELINUXNS: Fix initilization of the superblock security under spinlock
Date: Mon, 18 Apr 2022 17:45:48 +0800 [thread overview]
Message-ID: <20220418094552.128898-4-alexander.kozhevnikov@huawei.com> (raw)
In-Reply-To: <20220418094552.128898-1-alexander.kozhevnikov@huawei.com>
From: Igor Baranov <igor.baranov@huawei.com>
After porting 3378718ef7d4a837f32c63bdfcc0b70342cdd55d,
selinux_superblock() started being called from under spinlock, along
with kzalloc(GFP_NOFS), which causes a scheduling while atomic error.
The solution is to take the call to selinux_superblock() out from under
the spinlock.
Signed-off-by: Alexander Kozhevnikov <alexander.kozhevnikov@huawei.com>
Signed-off-by: Igor Baranov <igor.baranov@huawei.com>
---
security/selinux/hooks.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index a1716ce534dd..f02e31edae7c 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -1408,13 +1408,6 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
if (isec->initialized == LABEL_INITIALIZED)
return 0;
- spin_lock(&isec->lock);
- if (isec->initialized == LABEL_INITIALIZED)
- goto out_unlock;
-
- if (isec->sclass == SECCLASS_FILE)
- isec->sclass = inode_mode_to_security_class(inode->i_mode);
-
sbsec = selinux_superblock(inode->i_sb);
if (!(sbsec->flags & SE_SBINITIALIZED)) {
/* Defer initialization until selinux_complete_init,
@@ -1424,9 +1417,15 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
if (list_empty(&isec->list))
list_add(&isec->list, &sbsec->isec_head);
spin_unlock(&sbsec->isec_lock);
- goto out_unlock;
+ return 0;
}
+ spin_lock(&isec->lock);
+ if (isec->initialized == LABEL_INITIALIZED)
+ goto out_unlock;
+
+ if (isec->sclass == SECCLASS_FILE)
+ isec->sclass = inode_mode_to_security_class(inode->i_mode);
sclass = isec->sclass;
task_sid = isec->task_sid;
sid = isec->sid;
--
2.34.1
next prev parent reply other threads:[~2022-04-18 9:46 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <22c0d7a1-b658-64ce-f099-0b3617ef8e38@huawei.com>
[not found] ` <CAEjxPJ5-w83HMRGuDHHqMthkju3bxT0gZ-EiiTE=t5UhQqQ_ug@mail.gmail.com>
2021-07-19 13:54 ` issues about selinux namespace xiujianfeng
2021-07-20 2:56 ` Paul Moore
2021-07-21 13:12 ` xiujianfeng
2022-02-16 12:52 ` [RFC PATCH 0/1] SELinux-namespaces Igor Baranov
2022-02-16 12:52 ` [RFC PATCH 1/1] selinuxns: Replace state pointer with namespace id Igor Baranov
2022-02-16 17:08 ` [RFC PATCH 0/1] SELinux-namespaces Casey Schaufler
2022-02-16 20:47 ` Paul Moore
2022-04-18 9:45 ` [RFC PATCH 0/7] SELinux-namespace Alexander Kozhevnikov
2022-04-18 9:45 ` [RFC PATCH 1/7] LSM: Infrastructure management of the superblock Alexander Kozhevnikov
2022-04-18 9:45 ` [RFC PATCH 2/7] selinux: support per-namespace superblock security structures Alexander Kozhevnikov
2022-04-18 9:45 ` Alexander Kozhevnikov [this message]
2022-04-18 9:45 ` [RFC PATCH 4/7] SELINUXNS: Namespacing for xattrs Alexander Kozhevnikov
2022-04-18 9:45 ` [RFC PATCH 5/7] SELINUXNS: Migrate all open files and all vma to new namespace Alexander Kozhevnikov
2022-04-18 9:45 ` [RFC PATCH 6/7] SELINUXNS: Fixing superblock security structure memory leakage Alexander Kozhevnikov
2022-04-18 9:45 ` [RFC PATCH 7/7] SELINUXNS: Fixing concurrency issues Alexander Kozhevnikov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220418094552.128898-4-alexander.kozhevnikov@huawei.com \
--to=alexander.kozhevnikov@huawei.com \
--cc=anton.sirazetdinov@huawei.com \
--cc=artem.kuzin@huawei.com \
--cc=hw.likun@huawei.com \
--cc=igor.baranov@huawei.com \
--cc=jamorris@linux.microsoft.com \
--cc=linux-security-module@vger.kernel.org \
--cc=paul@paul-moore.com \
--cc=selinux@vger.kernel.org \
--cc=stephen.smalley.work@gmail.com \
--cc=xiujianfeng@huawei.com \
--cc=yusongping@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).