linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Casey Schaufler <casey@schaufler-ca.com>
To: Paul Moore <paul@paul-moore.com>, James Morris <jmorris@namei.org>
Cc: Christian Brauner <christian.brauner@ubuntu.com>,
	Christian Brauner <christian@brauner.io>,
	Linux Security Module list 
	<linux-security-module@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	syzbot <syzbot+d1e3b1d92d25abf97943@syzkaller.appspotmail.com>,
	David Howells <dhowells@redhat.com>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	selinux@vger.kernel.org, Casey Schaufler <casey@schaufler-ca.com>
Subject: Re: [PATCH v2] LSM: general protection fault in legacy_parse_param
Date: Thu, 27 Jan 2022 18:33:18 -0800	[thread overview]
Message-ID: <4405992a-8fad-f95a-b01b-f7a9412dd57f@schaufler-ca.com> (raw)
In-Reply-To: <CAHC9VhSt+c6QksHef=kx3dN_ouVZG0_a6FERzXs2-uzKmyE_zg@mail.gmail.com>

On 1/27/2022 5:44 PM, Paul Moore wrote:
> On Thu, Jan 27, 2022 at 12:46 PM James Morris <jmorris@namei.org> wrote:
>> On Thu, 27 Jan 2022, Casey Schaufler wrote:
>>
>>> The usual LSM hook "bail on fail" scheme doesn't work for cases where
>>> a security module may return an error code indicating that it does not
>>> recognize an input.  In this particular case Smack sees a mount option
>>> that it recognizes, and returns 0. A call to a BPF hook follows, which
>>> returns -ENOPARAM, which confuses the caller because Smack has processed
>>> its data.
>>>
>>> The SELinux hook incorrectly returns 1 on success. There was a time
>>> when this was correct, however the current expectation is that it
>>> return 0 on success. This is repaired.
>>>
>>> Reported-by: syzbot+d1e3b1d92d25abf97943@syzkaller.appspotmail.com
>>> Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
>>
>> Acked-by: James Morris <jamorris@linux.microsoft.com>
> Looks good to me too, thanks Casey.  Since James' already ACK'd it, I
> went ahead and pulled this into selinux/next.

Works for me. It was either James' tree or the SELinux tree.
Going through the security tree may have made more sense because
the original problem was reported against Smack, but that tree
isn't very active.

>
>>> ---
>>>   security/security.c      | 17 +++++++++++++++--
>>>   security/selinux/hooks.c |  5 ++---
>>>   2 files changed, 17 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/security/security.c b/security/security.c
>>> index 3d4eb474f35b..e649c8691be2 100644
>>> --- a/security/security.c
>>> +++ b/security/security.c
>>> @@ -884,9 +884,22 @@ int security_fs_context_dup(struct fs_context *fc, struct
>>> fs_context *src_fc)
>>>        return call_int_hook(fs_context_dup, 0, fc, src_fc);
>>>   }
>>>
>>> -int security_fs_context_parse_param(struct fs_context *fc, struct
>>> fs_parameter *param)
>>> +int security_fs_context_parse_param(struct fs_context *fc,
>>> +                                 struct fs_parameter *param)
>>>   {
>>> -     return call_int_hook(fs_context_parse_param, -ENOPARAM, fc, param);
>>> +     struct security_hook_list *hp;
>>> +     int trc;
>>> +     int rc = -ENOPARAM;
>>> +
>>> +     hlist_for_each_entry(hp, &security_hook_heads.fs_context_parse_param,
>>> +                          list) {
>>> +             trc = hp->hook.fs_context_parse_param(fc, param);
>>> +             if (trc == 0)
>>> +                     rc = 0;
>>> +             else if (trc != -ENOPARAM)
>>> +                     return trc;
>>> +     }
>>> +     return rc;
>>>   }
>>>
>>>   int security_sb_alloc(struct super_block *sb)
>>> diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
>>> index 5b6895e4fc29..371f67a37f9a 100644
>>> --- a/security/selinux/hooks.c
>>> +++ b/security/selinux/hooks.c
>>> @@ -2860,10 +2860,9 @@ static int selinux_fs_context_parse_param(struct
>>> fs_context *fc,
>>>                return opt;
>>>
>>>        rc = selinux_add_opt(opt, param->string, &fc->security);
>>> -     if (!rc) {
>>> +     if (!rc)
>>>                param->string = NULL;
>>> -             rc = 1;
>>> -     }
>>> +
>>>        return rc;
>>>   }

  reply	other threads:[~2022-01-28  2:33 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <018a9bb4-accb-c19a-5b0a-fde22f4bc822.ref@schaufler-ca.com>
2021-10-11 22:40 ` [PATCH] LSM: general protection fault in legacy_parse_param Casey Schaufler
2021-10-12 10:32   ` Christian Brauner
2021-10-12 14:27     ` Casey Schaufler
2022-01-25 22:18       ` Paul Moore
2022-01-25 23:30         ` Casey Schaufler
2022-01-25 23:36           ` Paul Moore
2022-01-26  7:24         ` Christian Brauner
2022-01-26 22:37           ` Paul Moore
2022-01-27 16:51         ` [PATCH v2] " Casey Schaufler
2022-01-27 17:33           ` James Morris
2022-01-28  1:44             ` Paul Moore
2022-01-28  2:33               ` Casey Schaufler [this message]
2022-01-28  8:59           ` Christian Brauner

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=4405992a-8fad-f95a-b01b-f7a9412dd57f@schaufler-ca.com \
    --to=casey@schaufler-ca.com \
    --cc=christian.brauner@ubuntu.com \
    --cc=christian@brauner.io \
    --cc=dhowells@redhat.com \
    --cc=jmorris@namei.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=paul@paul-moore.com \
    --cc=selinux@vger.kernel.org \
    --cc=syzbot+d1e3b1d92d25abf97943@syzkaller.appspotmail.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).