From: Al Viro <viro@zeniv.linux.org.uk>
To: Stephen Smalley <sds@tycho.nsa.gov>
Cc: selinux@vger.kernel.org, paul@paul-moore.com, will@kernel.org,
neilb@suse.de, linux-fsdevel@vger.kernel.org
Subject: Re: [RFC PATCH 2/2] selinux: fall back to ref-walk upon LSM_AUDIT_DATA_DENTRY too
Date: Fri, 22 Nov 2019 16:11:31 +0000 [thread overview]
Message-ID: <20191122161131.GB26530@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20191121145245.8637-2-sds@tycho.nsa.gov>
On Thu, Nov 21, 2019 at 09:52:45AM -0500, Stephen Smalley wrote:
> commit bda0be7ad994 ("security: make inode_follow_link RCU-walk aware")
> passed down the rcu flag to the SELinux AVC, but failed to adjust the
> test in slow_avc_audit() to also return -ECHILD on LSM_AUDIT_DATA_DENTRY.
> Previously, we only returned -ECHILD if generating an audit record with
> LSM_AUDIT_DATA_INODE since this was only relevant from inode_permission.
> Return -ECHILD on either LSM_AUDIT_DATA_INODE or LSM_AUDIT_DATA_DENTRY.
> LSM_AUDIT_DATA_INODE only requires this handling due to the fact
> that dump_common_audit_data() calls d_find_alias() and collects the
> dname from the result if any.
> Other cases that might require similar treatment in the future are
> LSM_AUDIT_DATA_PATH and LSM_AUDIT_DATA_FILE if any hook that takes
> a path or file is called under RCU-walk.
>
> Fixes: bda0be7ad994 ("security: make inode_follow_link RCU-walk aware")
> Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
> ---
> security/selinux/avc.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/security/selinux/avc.c b/security/selinux/avc.c
> index 74c43ebe34bb..f1fa1072230c 100644
> --- a/security/selinux/avc.c
> +++ b/security/selinux/avc.c
> @@ -779,7 +779,8 @@ noinline int slow_avc_audit(struct selinux_state *state,
> * during retry. However this is logically just as if the operation
> * happened a little later.
> */
> - if ((a->type == LSM_AUDIT_DATA_INODE) &&
> + if ((a->type == LSM_AUDIT_DATA_INODE ||
> + a->type == LSM_AUDIT_DATA_DENTRY) &&
> (flags & MAY_NOT_BLOCK))
IDGI, to be honest. Why do we bother with slow path if MAY_NOT_BLOCK has
been given? If we'd run into "there's something to report" case, we
are not on the fastpath anymore. IOW, why not have
audited = avc_audit_required(requested, avd, result, 0, &denied);
if (likely(!audited))
return 0;
if (flags & MAY_NOT_BLOCK)
return -ECHILD;
return slow_avc_audit(state, ssid, tsid, tclass,
requested, audited, denied, result,
a, flags);
in avc_audit() and be done with that?
It's not just whether we *can* collect whatever audit might want; do
we want to try and make an audit-spewing syscall marginally faster?
And "marginally" is all you'll get there, really...
We could do
error = security_inode_follow_link(dentry, inode,
nd->flags & LOOKUP_RCU);
if (unlikely(error)) {
if (error == -ECHILD && !unlazy_walk(nd))
error = security_inode_follow_link(dentry, inode, 0);
if (error)
return ERR_PTR(error);
}
in fs/namei.c:get_link() to slightly reduce the costs; that might or
might not be useful - I'd like to see profiling results first. But
trying to push the actual "spew to audit" into RCU case? What for?
next prev parent reply other threads:[~2019-11-22 16:11 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-21 14:52 [RFC PATCH 1/2] selinux: revert "stop passing MAY_NOT_BLOCK to the AVC upon follow_link" Stephen Smalley
2019-11-21 14:52 ` [RFC PATCH 2/2] selinux: fall back to ref-walk upon LSM_AUDIT_DATA_DENTRY too Stephen Smalley
2019-11-22 0:12 ` Paul Moore
2019-11-22 0:30 ` Paul Moore
2019-11-22 13:37 ` Stephen Smalley
2019-11-22 13:50 ` Stephen Smalley
2019-11-22 14:49 ` Paul Moore
2019-11-22 15:09 ` Stephen Smalley
2019-11-22 17:04 ` Stephen Smalley
2019-11-22 16:11 ` Al Viro [this message]
2019-11-22 16:27 ` Stephen Smalley
2019-12-05 14:20 ` Will Deacon
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=20191122161131.GB26530@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=linux-fsdevel@vger.kernel.org \
--cc=neilb@suse.de \
--cc=paul@paul-moore.com \
--cc=sds@tycho.nsa.gov \
--cc=selinux@vger.kernel.org \
--cc=will@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.