From: Gary Tierney <gary.tierney@gmx.com>
To: sds@tycho.nsa.gov
Cc: selinux@tycho.nsa.gov, linux-audit@redhat.com
Subject: Re: [PATCH 1/2] selinux: log errors when loading new policy
Date: Mon, 19 Dec 2016 16:00:41 +0000 [thread overview]
Message-ID: <20161219160041.GB5359@workstation> (raw)
In-Reply-To: <1482161529.28570.25.camel@tycho.nsa.gov>
On Mon, Dec 19, 2016 at 10:32:09AM -0500, Stephen Smalley wrote:
> On Mon, 2016-12-19 at 15:19 +0000, Gary Tierney wrote:
> > On Mon, Dec 19, 2016 at 09:43:06AM -0500, Stephen Smalley wrote:
> > >
> > > On Sat, 2016-12-17 at 20:48 +0000, Gary Tierney wrote:
> > > >
> > > > Adds error and warning messages to the codepaths which can fail
> > > > when
> > > > loading a new policy. If a policy fails to load, an error
> > > > message
> > > > will
> > > > be printed to dmesg with a description of what
> > > > failed. Previously if
> > > > there was an error during policy loading there would be no
> > > > indication
> > > > that it failed.
> > > >
> > > > Signed-off-by: Gary Tierney <gary.tierney@gmx.com>
> > > > ---
> > > > security/selinux/selinuxfs.c | 26 +++++++++++++++++++++-----
> > > > 1 file changed, 21 insertions(+), 5 deletions(-)
> > > >
> > > > diff --git a/security/selinux/selinuxfs.c
> > > > b/security/selinux/selinuxfs.c
> > > > index 0aac402..2139cc7 100644
> > > > --- a/security/selinux/selinuxfs.c
> > > > +++ b/security/selinux/selinuxfs.c
> > > > @@ -522,20 +522,32 @@ static ssize_t sel_write_load(struct file
> > > > *file, const char __user *buf,
> > > > goto out;
> > > >
> > > > length = security_load_policy(data, count);
> > > > - if (length)
> > > > + if (length) {
> > > > + pr_err("SELinux: %s: failed to load policy\n",
> > > > + __func__);
> > >
> > > Not sure about your usage of pr_err() vs pr_warn();
> > > security_load_policy() may simply fail due to invalid policy from
> > > userspace, not a kernel-internal error per se.
> > >
> >
> > The intention was to make a distinction between failures on or after
> > security_load_policy(). If security_load_policy() fails then no
> > audit message
> > will be logged about loading a new policy, so it seemed more
> > appropriate to
> > treat that case as KERN_ERROR. Though with what you said in mind, it
> > is
> > probably better to change this to pr_warn() as security_load_policy()
> > is
> > unlikely to cause an actual kernel-internal error.
>
> Yes, I tend to view them in the reverse; a failure on
> security_load_policy() is just a typical userspace-induced (or OOM)
> failure, whereas failure on any of the later calls will leave the
> kernel in an inconsistent internal state, so if anything, those should
> be the pr_err() cases instead, while security_load_policy() failure
> might even need/want a pr_warn_ratelimited() since it can be induced by
> userspace (albeit only root with :security load_policy permission).
>
Noted.
> >
> > >
> > > I would tend to omit the function name; I don't think it is
> > > especially
> > > helpful.
> > >
> >
> > Agreed. It seems to be used as a convention throughout
> > security/selinux,
> > though am happy to drop it from the patch.
> >
> > I was planning to send a v2 with pr_err() swapped for pr_warn() and
> > __func__
> > dropped from the log message, though keeping in mind that Steve has
> > prepared a
> > patch for this (also, logging to the audit subsystem might be more
> > appropriate) would it be better to drop #1 and keep #2?
>
> Not sure - I'd have to see Steve's patch or at least hear more details
> from him to know whether his patch would obsolete yours or just
> complement it.
>
Right, I'll spin up a v2 with the recommended changes and CC in Steve for his
feedback.
> >
> > >
> > > There was an earlier discussion about augmenting the audit logging
> > > from
> > > this function, so this might overlap with that. I don't know where
> > > that stands.
> > >
> > > >
> > > > goto out;
> > > > + }
> > > >
> > > > length = sel_make_bools();
> > > > - if (length)
> > > > + if (length) {
> > > > + pr_warn("SELinux: %s: failed to load policy
> > > > booleans\n",
> > > > + __func__);
> > > > goto out1;
> > > > + }
> > > >
> > > > length = sel_make_classes();
> > > > - if (length)
> > > > + if (length) {
> > > > + pr_warn("SELinux: %s: failed to load policy
> > > > classes\n",
> > > > + __func__);
> > > > goto out1;
> > > > + }
> > > >
> > > > length = sel_make_policycap();
> > > > - if (length)
> > > > + if (length) {
> > > > + pr_warn("SELinux: %s: failed to load policy
> > > > capabilities\n",
> > > > + __func__);
> > > > goto out1;
> > > > + }
> > > >
> > > > length = count;
> > > >
> > > > @@ -1299,9 +1311,13 @@ static int sel_make_bools(void)
> > > >
> > > > isec = (struct inode_security_struct *)inode-
> > > > >
> > > > > i_security;
> > > > ret = security_genfs_sid("selinuxfs", page,
> > > > SECCLASS_FILE, &sid);
> > > > - if (ret)
> > > > + if (ret) {
> > > > + pr_warn_ratelimited("SELinux: %s: failed
> > > > to
> > > > lookup sid for %s\n",
> > > > + __func__, page);
> > > > goto out;
> > > >
> > > > + }
> > > > +
> > > > isec->sid = sid;
> > > > isec->initialized = LABEL_INITIALIZED;
> > > > inode->i_fop = &sel_bool_ops;
> >
--
Gary Tierney
GPG fingerprint: 412C 0EF9 C305 68E6 B660 BDAF 706E D765 85AA 79D8
https://sks-keyservers.net/pks/lookup?op=get&search=0x706ED76585AA79D8
WARNING: multiple messages have this Message-ID (diff)
From: Gary Tierney <gary.tierney@gmx.com>
To: sds@tycho.nsa.gov
Cc: selinux@tycho.nsa.gov, paul@paul-moore.com, sgrubb@redhat.com,
linux-audit@redhat.com
Subject: Re: [PATCH 1/2] selinux: log errors when loading new policy
Date: Mon, 19 Dec 2016 16:00:41 +0000 [thread overview]
Message-ID: <20161219160041.GB5359@workstation> (raw)
In-Reply-To: <1482161529.28570.25.camel@tycho.nsa.gov>
On Mon, Dec 19, 2016 at 10:32:09AM -0500, Stephen Smalley wrote:
> On Mon, 2016-12-19 at 15:19 +0000, Gary Tierney wrote:
> > On Mon, Dec 19, 2016 at 09:43:06AM -0500, Stephen Smalley wrote:
> > >
> > > On Sat, 2016-12-17 at 20:48 +0000, Gary Tierney wrote:
> > > >
> > > > Adds error and warning messages to the codepaths which can fail
> > > > when
> > > > loading a new policy. If a policy fails to load, an error
> > > > message
> > > > will
> > > > be printed to dmesg with a description of what
> > > > failed. Previously if
> > > > there was an error during policy loading there would be no
> > > > indication
> > > > that it failed.
> > > >
> > > > Signed-off-by: Gary Tierney <gary.tierney@gmx.com>
> > > > ---
> > > > security/selinux/selinuxfs.c | 26 +++++++++++++++++++++-----
> > > > 1 file changed, 21 insertions(+), 5 deletions(-)
> > > >
> > > > diff --git a/security/selinux/selinuxfs.c
> > > > b/security/selinux/selinuxfs.c
> > > > index 0aac402..2139cc7 100644
> > > > --- a/security/selinux/selinuxfs.c
> > > > +++ b/security/selinux/selinuxfs.c
> > > > @@ -522,20 +522,32 @@ static ssize_t sel_write_load(struct file
> > > > *file, const char __user *buf,
> > > > goto out;
> > > >
> > > > length = security_load_policy(data, count);
> > > > - if (length)
> > > > + if (length) {
> > > > + pr_err("SELinux: %s: failed to load policy\n",
> > > > + __func__);
> > >
> > > Not sure about your usage of pr_err() vs pr_warn();
> > > security_load_policy() may simply fail due to invalid policy from
> > > userspace, not a kernel-internal error per se.
> > >
> >
> > The intention was to make a distinction between failures on or after
> > security_load_policy(). If security_load_policy() fails then no
> > audit message
> > will be logged about loading a new policy, so it seemed more
> > appropriate to
> > treat that case as KERN_ERROR. Though with what you said in mind, it
> > is
> > probably better to change this to pr_warn() as security_load_policy()
> > is
> > unlikely to cause an actual kernel-internal error.
>
> Yes, I tend to view them in the reverse; a failure on
> security_load_policy() is just a typical userspace-induced (or OOM)
> failure, whereas failure on any of the later calls will leave the
> kernel in an inconsistent internal state, so if anything, those should
> be the pr_err() cases instead, while security_load_policy() failure
> might even need/want a pr_warn_ratelimited() since it can be induced by
> userspace (albeit only root with :security load_policy permission).
>
Noted.
> >
> > >
> > > I would tend to omit the function name; I don't think it is
> > > especially
> > > helpful.
> > >
> >
> > Agreed. It seems to be used as a convention throughout
> > security/selinux,
> > though am happy to drop it from the patch.
> >
> > I was planning to send a v2 with pr_err() swapped for pr_warn() and
> > __func__
> > dropped from the log message, though keeping in mind that Steve has
> > prepared a
> > patch for this (also, logging to the audit subsystem might be more
> > appropriate) would it be better to drop #1 and keep #2?
>
> Not sure - I'd have to see Steve's patch or at least hear more details
> from him to know whether his patch would obsolete yours or just
> complement it.
>
Right, I'll spin up a v2 with the recommended changes and CC in Steve for his
feedback.
> >
> > >
> > > There was an earlier discussion about augmenting the audit logging
> > > from
> > > this function, so this might overlap with that. I don't know where
> > > that stands.
> > >
> > > >
> > > > goto out;
> > > > + }
> > > >
> > > > length = sel_make_bools();
> > > > - if (length)
> > > > + if (length) {
> > > > + pr_warn("SELinux: %s: failed to load policy
> > > > booleans\n",
> > > > + __func__);
> > > > goto out1;
> > > > + }
> > > >
> > > > length = sel_make_classes();
> > > > - if (length)
> > > > + if (length) {
> > > > + pr_warn("SELinux: %s: failed to load policy
> > > > classes\n",
> > > > + __func__);
> > > > goto out1;
> > > > + }
> > > >
> > > > length = sel_make_policycap();
> > > > - if (length)
> > > > + if (length) {
> > > > + pr_warn("SELinux: %s: failed to load policy
> > > > capabilities\n",
> > > > + __func__);
> > > > goto out1;
> > > > + }
> > > >
> > > > length = count;
> > > >
> > > > @@ -1299,9 +1311,13 @@ static int sel_make_bools(void)
> > > >
> > > > isec = (struct inode_security_struct *)inode-
> > > > >
> > > > > i_security;
> > > > ret = security_genfs_sid("selinuxfs", page,
> > > > SECCLASS_FILE, &sid);
> > > > - if (ret)
> > > > + if (ret) {
> > > > + pr_warn_ratelimited("SELinux: %s: failed
> > > > to
> > > > lookup sid for %s\n",
> > > > + __func__, page);
> > > > goto out;
> > > >
> > > > + }
> > > > +
> > > > isec->sid = sid;
> > > > isec->initialized = LABEL_INITIALIZED;
> > > > inode->i_fop = &sel_bool_ops;
> >
--
Gary Tierney
GPG fingerprint: 412C 0EF9 C305 68E6 B660 BDAF 706E D765 85AA 79D8
https://sks-keyservers.net/pks/lookup?op=get&search=0x706ED76585AA79D8
next prev parent reply other threads:[~2016-12-19 16:00 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-17 20:48 [PATCH 0/2] kernel: add error handling / logging to sel_write_load()/sel_make_bools() Gary Tierney
2016-12-17 20:48 ` [PATCH 1/2] selinux: log errors when loading new policy Gary Tierney
2016-12-19 14:43 ` Stephen Smalley
2016-12-19 14:43 ` Stephen Smalley
2016-12-19 15:08 ` Steve Grubb
2016-12-19 15:08 ` Steve Grubb
2016-12-19 15:19 ` Gary Tierney
2016-12-19 15:19 ` Gary Tierney
2016-12-19 15:32 ` Stephen Smalley
2016-12-19 15:32 ` Stephen Smalley
2016-12-19 16:00 ` Gary Tierney [this message]
2016-12-19 16:00 ` Gary Tierney
2016-12-20 1:28 ` [PATCH v2 0/2] Gary Tierney
2016-12-20 1:28 ` [PATCH v2 1/2] selinux: log errors when loading new policy Gary Tierney
2016-12-20 15:30 ` Stephen Smalley
2016-12-23 21:14 ` Paul Moore
2016-12-20 1:28 ` [PATCH v2 2/2] selinux: default to security isid in sel_make_bools() if no sid is found Gary Tierney
2016-12-20 15:31 ` Stephen Smalley
2016-12-23 21:20 ` Paul Moore
2016-12-20 3:15 ` [PATCH v2 0/2] Steve Grubb
2016-12-17 20:48 ` [PATCH 2/2] selinux: default to security isid in sel_make_bools() if no sid is found Gary Tierney
2016-12-19 14:46 ` Stephen Smalley
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=20161219160041.GB5359@workstation \
--to=gary.tierney@gmx.com \
--cc=linux-audit@redhat.com \
--cc=sds@tycho.nsa.gov \
--cc=selinux@tycho.nsa.gov \
/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.