All of lore.kernel.org
 help / color / mirror / Atom feed
From: peter enderborg <peter.enderborg@sony.com>
To: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
	Paul Moore <paul@paul-moore.com>
Cc: <selinux@tycho.nsa.gov>,
	<syzbot+ac488b9811036cea7ea0@syzkaller.appspotmail.com>,
	Eric Paris <eparis@parisplace.org>,
	<linux-kernel@vger.kernel.org>,
	Stephen Smalley <sds@tycho.nsa.gov>,
	<syzkaller-bugs@googlegroups.com>, linux-mm <linux-mm@kvack.org>
Subject: Re: [PATCH] selinux: Add __GFP_NOWARN to allocation at str_read()
Date: Thu, 13 Sep 2018 09:12:04 +0200	[thread overview]
Message-ID: <9d685700-bc5c-9c2f-7795-56f488d2ea38@sony.com> (raw)
In-Reply-To: <ea29a8bf-95b2-91d2-043b-ed73c9023166@i-love.sakura.ne.jp>

On 09/13/2018 08:26 AM, Tetsuo Handa wrote:
> On 2018/09/13 12:02, Paul Moore wrote:
>> On Fri, Sep 7, 2018 at 12:43 PM Tetsuo Handa
>> <penguin-kernel@i-love.sakura.ne.jp> wrote:
>>> syzbot is hitting warning at str_read() [1] because len parameter can
>>> become larger than KMALLOC_MAX_SIZE. We don't need to emit warning for
>>> this case.
>>>
>>> [1] https://syzkaller.appspot.com/bug?id=7f2f5aad79ea8663c296a2eedb81978401a908f0
>>>
>>> Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
>>> Reported-by: syzbot <syzbot+ac488b9811036cea7ea0@syzkaller.appspotmail.com>
>>> ---
>>>  security/selinux/ss/policydb.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c
>>> index e9394e7..f4eadd3 100644
>>> --- a/security/selinux/ss/policydb.c
>>> +++ b/security/selinux/ss/policydb.c
>>> @@ -1101,7 +1101,7 @@ static int str_read(char **strp, gfp_t flags, void *fp, u32 len)
>>>         if ((len == 0) || (len == (u32)-1))
>>>                 return -EINVAL;
>>>
>>> -       str = kmalloc(len + 1, flags);
>>> +       str = kmalloc(len + 1, flags | __GFP_NOWARN);
>>>         if (!str)
>>>                 return -ENOMEM;
>> Thanks for the patch.
>>
>> My eyes are starting to glaze over a bit chasing down all of the
>> different kmalloc() code paths trying to ensure that this always does
>> the right thing based on size of the allocation and the different slab
>> allocators ... are we sure that this will always return NULL when (len
>> + 1) is greater than KMALLOC_MAX_SIZE for the different slab allocator
>> configurations?
>>
> Yes, for (len + 1) cannot become 0 (which causes kmalloc() to return
> ZERO_SIZE_PTR) due to (len == (u32)-1) check above.
>
> The only concern would be whether you want allocation failure messages.
> I assumed you don't need it because we are returning -ENOMEM to the caller.
>
Would it not be better with

    char *str;

    if ((len == 0) || (len == (u32)-1) || (len >= KMALLOC_MAX_SIZE))
        return -EINVAL;

    str = kmalloc(len + 1, flags);
    if (!str)
        return -ENOMEM;


WARNING: multiple messages have this Message-ID (diff)
From: peter enderborg <peter.enderborg@sony.com>
To: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
	Paul Moore <paul@paul-moore.com>
Cc: selinux@tycho.nsa.gov,
	syzbot+ac488b9811036cea7ea0@syzkaller.appspotmail.com,
	Eric Paris <eparis@parisplace.org>,
	linux-kernel@vger.kernel.org, Stephen Smalley <sds@tycho.nsa.gov>,
	syzkaller-bugs@googlegroups.com, linux-mm <linux-mm@kvack.org>
Subject: Re: [PATCH] selinux: Add __GFP_NOWARN to allocation at str_read()
Date: Thu, 13 Sep 2018 09:12:04 +0200	[thread overview]
Message-ID: <9d685700-bc5c-9c2f-7795-56f488d2ea38@sony.com> (raw)
In-Reply-To: <ea29a8bf-95b2-91d2-043b-ed73c9023166@i-love.sakura.ne.jp>

On 09/13/2018 08:26 AM, Tetsuo Handa wrote:
> On 2018/09/13 12:02, Paul Moore wrote:
>> On Fri, Sep 7, 2018 at 12:43 PM Tetsuo Handa
>> <penguin-kernel@i-love.sakura.ne.jp> wrote:
>>> syzbot is hitting warning at str_read() [1] because len parameter can
>>> become larger than KMALLOC_MAX_SIZE. We don't need to emit warning for
>>> this case.
>>>
>>> [1] https://syzkaller.appspot.com/bug?id=7f2f5aad79ea8663c296a2eedb81978401a908f0
>>>
>>> Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
>>> Reported-by: syzbot <syzbot+ac488b9811036cea7ea0@syzkaller.appspotmail.com>
>>> ---
>>>  security/selinux/ss/policydb.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c
>>> index e9394e7..f4eadd3 100644
>>> --- a/security/selinux/ss/policydb.c
>>> +++ b/security/selinux/ss/policydb.c
>>> @@ -1101,7 +1101,7 @@ static int str_read(char **strp, gfp_t flags, void *fp, u32 len)
>>>         if ((len == 0) || (len == (u32)-1))
>>>                 return -EINVAL;
>>>
>>> -       str = kmalloc(len + 1, flags);
>>> +       str = kmalloc(len + 1, flags | __GFP_NOWARN);
>>>         if (!str)
>>>                 return -ENOMEM;
>> Thanks for the patch.
>>
>> My eyes are starting to glaze over a bit chasing down all of the
>> different kmalloc() code paths trying to ensure that this always does
>> the right thing based on size of the allocation and the different slab
>> allocators ... are we sure that this will always return NULL when (len
>> + 1) is greater than KMALLOC_MAX_SIZE for the different slab allocator
>> configurations?
>>
> Yes, for (len + 1) cannot become 0 (which causes kmalloc() to return
> ZERO_SIZE_PTR) due to (len == (u32)-1) check above.
>
> The only concern would be whether you want allocation failure messages.
> I assumed you don't need it because we are returning -ENOMEM to the caller.
>
Would it not be better with

    char *str;

    if ((len == 0) || (len == (u32)-1) || (len >= KMALLOC_MAX_SIZE))
        return -EINVAL;

    str = kmalloc(len + 1, flags);
    if (!str)
        return -ENOMEM;

  reply	other threads:[~2018-09-13  7:12 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-07 12:48 WARNING: kmalloc bug in str_read syzbot
2018-09-07 16:42 ` [PATCH] selinux: Add __GFP_NOWARN to allocation at str_read() Tetsuo Handa
2018-09-13  3:02   ` Paul Moore
2018-09-13  6:26     ` Tetsuo Handa
2018-09-13  7:12       ` peter enderborg [this message]
2018-09-13  7:12         ` peter enderborg
2018-09-13 11:11         ` Michal Hocko
2018-09-13 11:11           ` Michal Hocko
2018-09-13 12:55           ` peter enderborg
2018-09-13 12:55             ` peter enderborg
2018-09-13 13:03             ` Dmitry Vyukov
2018-09-13 19:35             ` Paul Moore
2018-09-13 19:28         ` Paul Moore
2018-09-13 19:23       ` Paul Moore
2018-09-13  8:01     ` Dmitry Vyukov
2018-09-07 21:24 ` WARNING: kmalloc bug in str_read syzbot

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=9d685700-bc5c-9c2f-7795-56f488d2ea38@sony.com \
    --to=peter.enderborg@sony.com \
    --cc=eparis@parisplace.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=paul@paul-moore.com \
    --cc=penguin-kernel@i-love.sakura.ne.jp \
    --cc=sds@tycho.nsa.gov \
    --cc=selinux@tycho.nsa.gov \
    --cc=syzbot+ac488b9811036cea7ea0@syzkaller.appspotmail.com \
    --cc=syzkaller-bugs@googlegroups.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 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.