From: Stephen Smalley <sds@tycho.nsa.gov>
To: Paul Moore <paul@paul-moore.com>, selinux@vger.kernel.org
Cc: rsiddoji@codeaurora.org, linux-security-module@vger.kernel.org
Subject: Re: [RFC PATCH] selinux: ensure we cleanup the internal AVC counters on error in avc_insert()
Date: Tue, 10 Dec 2019 08:44:52 -0500 [thread overview]
Message-ID: <f7e43b67-3f46-e480-f8b0-e86eff85293f@tycho.nsa.gov> (raw)
In-Reply-To: <157594281322.676903.11041338053333686450.stgit@chester>
On 12/9/19 8:53 PM, Paul Moore wrote:
> In AVC insert we don't call avc_node_kill() when avc_xperms_populate()
> fails, resulting in the avc->avc_cache.active_nodes counter having a
> false value.
incorrect value?
This patch corrects this problem and does some cleanup
> in avc_insert() while we are there.
submitting-patches.rst recommends describing in imperative mood and
avoiding the words "patch" in what will eventually just be a commit log,
ala "Correct this problem and perform some cleanup..."
Should probably add a:
Fixes: fa1aa143ac4a ("selinux: extended permissions for ioctls")
Might be easier to back port if you split the cleanup from the fix, but
your call of course.
>
> Reported-by: rsiddoji@codeaurora.org
> Suggested-by: Stephen Smalley <sds@tycho.nsa.gov>
> Signed-off-by: Paul Moore <paul@paul-moore.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
> ---
> security/selinux/avc.c | 51 +++++++++++++++++++++++-------------------------
> 1 file changed, 24 insertions(+), 27 deletions(-)
>
> diff --git a/security/selinux/avc.c b/security/selinux/avc.c
> index 23dc888ae305..6646300f7ccb 100644
> --- a/security/selinux/avc.c
> +++ b/security/selinux/avc.c
> @@ -617,40 +617,37 @@ static struct avc_node *avc_insert(struct selinux_avc *avc,
> struct avc_node *pos, *node = NULL;
> int hvalue;
> unsigned long flag;
> + spinlock_t *lock;
> + struct hlist_head *head;
>
> if (avc_latest_notif_update(avc, avd->seqno, 1))
> - goto out;
> + return NULL;
>
> node = avc_alloc_node(avc);
> - if (node) {
> - struct hlist_head *head;
> - spinlock_t *lock;
> - int rc = 0;
> -
> - hvalue = avc_hash(ssid, tsid, tclass);
> - avc_node_populate(node, ssid, tsid, tclass, avd);
> - rc = avc_xperms_populate(node, xp_node);
> - if (rc) {
> - kmem_cache_free(avc_node_cachep, node);
> - return NULL;
> - }
> - head = &avc->avc_cache.slots[hvalue];
> - lock = &avc->avc_cache.slots_lock[hvalue];
> + if (!node)
> + return NULL;
>
> - spin_lock_irqsave(lock, flag);
> - hlist_for_each_entry(pos, head, list) {
> - if (pos->ae.ssid == ssid &&
> - pos->ae.tsid == tsid &&
> - pos->ae.tclass == tclass) {
> - avc_node_replace(avc, node, pos);
> - goto found;
> - }
> + avc_node_populate(node, ssid, tsid, tclass, avd);
> + if (avc_xperms_populate(node, xp_node)) {
> + avc_node_kill(avc, node);
> + return NULL;
> + }
> +
> + hvalue = avc_hash(ssid, tsid, tclass);
> + head = &avc->avc_cache.slots[hvalue];
> + lock = &avc->avc_cache.slots_lock[hvalue];
> + spin_lock_irqsave(lock, flag);
> + hlist_for_each_entry(pos, head, list) {
> + if (pos->ae.ssid == ssid &&
> + pos->ae.tsid == tsid &&
> + pos->ae.tclass == tclass) {
> + avc_node_replace(avc, node, pos);
> + goto found;
> }
> - hlist_add_head_rcu(&node->list, head);
> -found:
> - spin_unlock_irqrestore(lock, flag);
> }
> -out:
> + hlist_add_head_rcu(&node->list, head);
> +found:
> + spin_unlock_irqrestore(lock, flag);
> return node;
> }
>
>
next prev parent reply other threads:[~2019-12-10 13:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-10 1:53 [RFC PATCH] selinux: ensure we cleanup the internal AVC counters on error in avc_insert() Paul Moore
2019-12-10 1:54 ` Paul Moore
2019-12-10 13:44 ` Stephen Smalley [this message]
2019-12-10 15:54 ` Paul Moore
2019-12-10 16:12 ` Stephen Smalley
2019-12-10 19:19 ` Paul Moore
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=f7e43b67-3f46-e480-f8b0-e86eff85293f@tycho.nsa.gov \
--to=sds@tycho.nsa.gov \
--cc=linux-security-module@vger.kernel.org \
--cc=paul@paul-moore.com \
--cc=rsiddoji@codeaurora.org \
--cc=selinux@vger.kernel.org \
/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