2021-07-12 23:45:24

by Austin Kim

[permalink] [raw]
Subject: [PATCH] LSM: add NULL check for kcalloc()

From: Austin Kim <[email protected]>

kcalloc() may return NULL when memory allocation fails.
So it is necessary to add NULL check after the call to kcalloc() is made.

Signed-off-by: Austin Kim <[email protected]>
---
security/security.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/security/security.c b/security/security.c
index 09533cbb7221..f885c9e9bc35 100644
--- a/security/security.c
+++ b/security/security.c
@@ -321,6 +321,8 @@ static void __init ordered_lsm_init(void)

ordered_lsms = kcalloc(LSM_COUNT + 1, sizeof(*ordered_lsms),
GFP_KERNEL);
+ if (ordered_lsms)
+ return;

if (chosen_lsm_order) {
if (chosen_major_lsm) {
--
2.20.1


2021-07-14 19:14:05

by James Morris

[permalink] [raw]
Subject: Re: [PATCH] LSM: add NULL check for kcalloc()

On Tue, 13 Jul 2021, Austin Kim wrote:

> From: Austin Kim <[email protected]>
>
> kcalloc() may return NULL when memory allocation fails.
> So it is necessary to add NULL check after the call to kcalloc() is made.
>
> Signed-off-by: Austin Kim <[email protected]>
> ---
> security/security.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/security/security.c b/security/security.c
> index 09533cbb7221..f885c9e9bc35 100644
> --- a/security/security.c
> +++ b/security/security.c
> @@ -321,6 +321,8 @@ static void __init ordered_lsm_init(void)
>
> ordered_lsms = kcalloc(LSM_COUNT + 1, sizeof(*ordered_lsms),
> GFP_KERNEL);
> + if (ordered_lsms)
> + return;

Your logic is reversed here.

Should this also be a kernel panic?

>
> if (chosen_lsm_order) {
> if (chosen_major_lsm) {
> --
> 2.20.1
>

--
James Morris
<[email protected]>

2021-07-14 23:17:08

by Austin Kim

[permalink] [raw]
Subject: Re: [PATCH] LSM: add NULL check for kcalloc()

2021년 7월 15일 (목) 오전 4:12, James Morris <[email protected]>님이 작성:
>
> On Tue, 13 Jul 2021, Austin Kim wrote:
>
> > From: Austin Kim <[email protected]>
> >
> > kcalloc() may return NULL when memory allocation fails.
> > So it is necessary to add NULL check after the call to kcalloc() is made.
> >
> > Signed-off-by: Austin Kim <[email protected]>
> > ---
> > security/security.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/security/security.c b/security/security.c
> > index 09533cbb7221..f885c9e9bc35 100644
> > --- a/security/security.c
> > +++ b/security/security.c
> > @@ -321,6 +321,8 @@ static void __init ordered_lsm_init(void)
> >
> > ordered_lsms = kcalloc(LSM_COUNT + 1, sizeof(*ordered_lsms),
> > GFP_KERNEL);
> > + if (ordered_lsms)
> > + return;
>
> Your logic is reversed here.

I feel very sorry for my terrible mistake.
'if (ordered_lsms)' should have been 'if (!ordered_lsms)'.

Let me resend patch(v2) soon.

Thanks,
Austin Kim

>
> Should this also be a kernel panic?
>
> >
> > if (chosen_lsm_order) {
> > if (chosen_major_lsm) {
> > --
> > 2.20.1
> >
>
> --
> James Morris
> <[email protected]>
>

2021-08-07 00:03:07

by Ken Goldman

[permalink] [raw]
Subject: Re: [PATCH] LSM: add NULL check for kcalloc()

On 7/14/2021 5:44 PM, Austin Kim wrote:
> 2021년 7월 15일 (목) 오전 4:12, James Morris <[email protected]>님이 작성:
>>
>> On Tue, 13 Jul 2021, Austin Kim wrote:
>>
>>> From: Austin Kim <[email protected]>
>>>
>>> kcalloc() may return NULL when memory allocation fails.
>>> So it is necessary to add NULL check after the call to kcalloc() is made.
>>>
>>> Signed-off-by: Austin Kim <[email protected]>
>>> ---
>>> security/security.c | 2 ++
>>> 1 file changed, 2 insertions(+)
>>>
>>> diff --git a/security/security.c b/security/security.c
>>> index 09533cbb7221..f885c9e9bc35 100644
>>> --- a/security/security.c
>>> +++ b/security/security.c
>>> @@ -321,6 +321,8 @@ static void __init ordered_lsm_init(void)
>>>
>>> ordered_lsms = kcalloc(LSM_COUNT + 1, sizeof(*ordered_lsms),
>>> GFP_KERNEL);
>>> + if (ordered_lsms)
>>> + return;
>>
>> Your logic is reversed here.
>
> I feel very sorry for my terrible mistake.
> 'if (ordered_lsms)' should have been 'if (!ordered_lsms)'.
>

I know it's a bit more typing, but

if (ordered_lsms == NULL)

compiles down to the same binary and avoids there errors that
try to treat a pointer as a boolean.



Attachments:
smime.p7s (4.38 kB)
S/MIME Cryptographic Signature