2021-10-13 09:11:54

by Gaosheng Cui

[permalink] [raw]
Subject: [PATCH -next,v2 1/2] audit: fix possible null-pointer dereference in audit_filter_rules

Fix this possible null-pointer dereference in audit_filter_rules.

If ctx is null, a null-pointer dereference will occur:
case AUDIT_SADDR_FAM:
if (ctx->sockaddr)
...
break;

audit_filter_rules() error: we previously assumed 'ctx' could be null

Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>
Signed-off-by: Gaosheng Cui <[email protected]>
---
kernel/auditsc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index 4ba3b8573ff4..42d4a4320526 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -647,7 +647,7 @@ static int audit_filter_rules(struct task_struct *tsk,
result = audit_comparator(audit_loginuid_set(tsk), f->op, f->val);
break;
case AUDIT_SADDR_FAM:
- if (ctx->sockaddr)
+ if (ctx && ctx->sockaddr)
result = audit_comparator(ctx->sockaddr->ss_family,
f->op, f->val);
break;
--
2.30.0


2021-10-13 21:14:40

by Paul Moore

[permalink] [raw]
Subject: Re: [PATCH -next,v2 1/2] audit: fix possible null-pointer dereference in audit_filter_rules

On Wed, Oct 13, 2021 at 5:10 AM Gaosheng Cui <[email protected]> wrote:
>
> Fix this possible null-pointer dereference in audit_filter_rules.

Thanks for fixing this, just a couple of small comments:

I think you can drop the description text below here, the code snippet
is just a duplicate of the code and the error message is pretty
obvious.

> If ctx is null, a null-pointer dereference will occur:
> case AUDIT_SADDR_FAM:
> if (ctx->sockaddr)
> ...
> break;
>
> audit_filter_rules() error: we previously assumed 'ctx' could be null
>
> Reported-by: kernel test robot <[email protected]>
> Reported-by: Dan Carpenter <[email protected]>
> Signed-off-by: Gaosheng Cui <[email protected]>

I would also add a Fixes tag, for example:

Fixes: bf361231c295 ("audit: add saddr_fam filter field")

> ---
> kernel/auditsc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/auditsc.c b/kernel/auditsc.c
> index 4ba3b8573ff4..42d4a4320526 100644
> --- a/kernel/auditsc.c
> +++ b/kernel/auditsc.c
> @@ -647,7 +647,7 @@ static int audit_filter_rules(struct task_struct *tsk,
> result = audit_comparator(audit_loginuid_set(tsk), f->op, f->val);
> break;
> case AUDIT_SADDR_FAM:
> - if (ctx->sockaddr)
> + if (ctx && ctx->sockaddr)
> result = audit_comparator(ctx->sockaddr->ss_family,
> f->op, f->val);
> break;
> --
> 2.30.0

--
paul moore
http://www.paul-moore.com

2021-10-18 03:30:21

by Gaosheng Cui

[permalink] [raw]
Subject: Re: [PATCH -next,v2 1/2] audit: fix possible null-pointer dereference in audit_filter_rules

Thanks for your review, and i have droped the redundant commit message
and add a Fixes tag to the patch.

https://patchwork.kernel.org/project/linux-audit/patch/[email protected]/
<https://patchwork.kernel.org/project/linux-audit/patch/[email protected]/>

Gaosheng.

在 2021/10/14 5:12, Paul Moore 写道:
> On Wed, Oct 13, 2021 at 5:10 AM Gaosheng Cui <[email protected]> wrote:
>> Fix this possible null-pointer dereference in audit_filter_rules.
> Thanks for fixing this, just a couple of small comments:
>
> I think you can drop the description text below here, the code snippet
> is just a duplicate of the code and the error message is pretty
> obvious.
>
>> If ctx is null, a null-pointer dereference will occur:
>> case AUDIT_SADDR_FAM:
>> if (ctx->sockaddr)
>> ...
>> break;
>>
>> audit_filter_rules() error: we previously assumed 'ctx' could be null
>>
>> Reported-by: kernel test robot <[email protected]>
>> Reported-by: Dan Carpenter <[email protected]>
>> Signed-off-by: Gaosheng Cui <[email protected]>
> I would also add a Fixes tag, for example:
>
> Fixes: bf361231c295 ("audit: add saddr_fam filter field")
>
>> ---
>> kernel/auditsc.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/kernel/auditsc.c b/kernel/auditsc.c
>> index 4ba3b8573ff4..42d4a4320526 100644
>> --- a/kernel/auditsc.c
>> +++ b/kernel/auditsc.c
>> @@ -647,7 +647,7 @@ static int audit_filter_rules(struct task_struct *tsk,
>> result = audit_comparator(audit_loginuid_set(tsk), f->op, f->val);
>> break;
>> case AUDIT_SADDR_FAM:
>> - if (ctx->sockaddr)
>> + if (ctx && ctx->sockaddr)
>> result = audit_comparator(ctx->sockaddr->ss_family,
>> f->op, f->val);
>> break;
>> --
>> 2.30.0