All of lore.kernel.org
 help / color / mirror / Atom feed
From: Abhinav Singh <singhabhinav9051571833@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: brauner@kernel.org, surenb@google.com, mst@redhat.com,
	michael.christie@oracle.com, mathieu.desnoyers@efficios.com,
	mjguzik@gmail.com, npiggin@gmail.com, shakeelb@google.com,
	peterz@infradead.org, linux-kernel@vger.kernel.org,
	linux-kernel-mentees@lists.linuxfoundation.org
Subject: Re: [PATCH] Fixing warning of directly dereferencing __rcu tagged
Date: Thu, 26 Oct 2023 04:57:42 +0530	[thread overview]
Message-ID: <c4688c53-4206-4d54-aed9-f877697e8073@gmail.com> (raw)
In-Reply-To: <20231025153807.8db950f1db82b2c9ecd03758@linux-foundation.org>

On 10/26/23 04:08, Andrew Morton wrote:
> On Thu, 26 Oct 2023 03:58:11 +0530 Abhinav Singh <singhabhinav9051571833@gmail.com> wrote:
> 
>> This patch fixes the warning about directly dereferencing a pointer
>> tagged with __rcu annotation.
>>
>> Dereferencing the pointers tagged with __rcu directly should
>> always be avoided according to the docs. There is a rcu helper
>> functions rcu_dereference(...) to use when dereferencing a __rcu
>> pointer. This functions returns the non __rcu tagged pointer.
> 
> Seems sensible.
> 
>> Like normal pointer there should be a check for null case when
>> further dereferencing the returned dereferenced __rcu pointer.
> 
> Why is this?
> 
>> --- a/kernel/fork.c
>> +++ b/kernel/fork.c
>> @@ -2369,7 +2369,9 @@ __latent_entropy struct task_struct *copy_process(
>>   
>>   	retval = -EAGAIN;
>>   	if (is_rlimit_overlimit(task_ucounts(p), UCOUNT_RLIMIT_NPROC, rlimit(RLIMIT_NPROC))) {
>> -		if (p->real_cred->user != INIT_USER &&
>> +		const struct cred *real_cred = rcu_dereference(p->real_cred);
>> +
>> +		if (real_cred && real_cred->user != INIT_USER &&
>>   		    !capable(CAP_SYS_RESOURCE) && !capable(CAP_SYS_ADMIN))
>>   			goto bad_fork_cleanup_count;
> 
> The old code assumes that p->read_cred cannot be NULL and the new code
> does nothing to make it possible that `real_cred' can be NULL?
> 
> In other words, I see no reason to add this new check for NULL?

Thank you for the response!

I thought it will be better to have check before accessing it, just so 
we dont have any segmentation fault in future.

Also I just noticed there are two more places where direct dereferencing 
of __rcu pointer is done in this same file. Should I do those changes in 
this patch ?


WARNING: multiple messages have this Message-ID (diff)
From: Abhinav Singh <singhabhinav9051571833@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: brauner@kernel.org, mjguzik@gmail.com, mst@redhat.com,
	peterz@infradead.org,
	linux-kernel-mentees@lists.linuxfoundation.org,
	linux-kernel@vger.kernel.org, npiggin@gmail.com,
	mathieu.desnoyers@efficios.com, shakeelb@google.com,
	surenb@google.com, michael.christie@oracle.com
Subject: Re: [PATCH] Fixing warning of directly dereferencing __rcu tagged
Date: Thu, 26 Oct 2023 04:57:42 +0530	[thread overview]
Message-ID: <c4688c53-4206-4d54-aed9-f877697e8073@gmail.com> (raw)
In-Reply-To: <20231025153807.8db950f1db82b2c9ecd03758@linux-foundation.org>

On 10/26/23 04:08, Andrew Morton wrote:
> On Thu, 26 Oct 2023 03:58:11 +0530 Abhinav Singh <singhabhinav9051571833@gmail.com> wrote:
> 
>> This patch fixes the warning about directly dereferencing a pointer
>> tagged with __rcu annotation.
>>
>> Dereferencing the pointers tagged with __rcu directly should
>> always be avoided according to the docs. There is a rcu helper
>> functions rcu_dereference(...) to use when dereferencing a __rcu
>> pointer. This functions returns the non __rcu tagged pointer.
> 
> Seems sensible.
> 
>> Like normal pointer there should be a check for null case when
>> further dereferencing the returned dereferenced __rcu pointer.
> 
> Why is this?
> 
>> --- a/kernel/fork.c
>> +++ b/kernel/fork.c
>> @@ -2369,7 +2369,9 @@ __latent_entropy struct task_struct *copy_process(
>>   
>>   	retval = -EAGAIN;
>>   	if (is_rlimit_overlimit(task_ucounts(p), UCOUNT_RLIMIT_NPROC, rlimit(RLIMIT_NPROC))) {
>> -		if (p->real_cred->user != INIT_USER &&
>> +		const struct cred *real_cred = rcu_dereference(p->real_cred);
>> +
>> +		if (real_cred && real_cred->user != INIT_USER &&
>>   		    !capable(CAP_SYS_RESOURCE) && !capable(CAP_SYS_ADMIN))
>>   			goto bad_fork_cleanup_count;
> 
> The old code assumes that p->read_cred cannot be NULL and the new code
> does nothing to make it possible that `real_cred' can be NULL?
> 
> In other words, I see no reason to add this new check for NULL?

Thank you for the response!

I thought it will be better to have check before accessing it, just so 
we dont have any segmentation fault in future.

Also I just noticed there are two more places where direct dereferencing 
of __rcu pointer is done in this same file. Should I do those changes in 
this patch ?

_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees

  reply	other threads:[~2023-10-25 23:28 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-25 22:28 [PATCH] Fixing warning of directly dereferencing __rcu tagged Abhinav Singh
2023-10-25 22:28 ` Abhinav Singh
2023-10-25 22:38 ` Andrew Morton
2023-10-25 22:38   ` Andrew Morton
2023-10-25 23:27   ` Abhinav Singh [this message]
2023-10-25 23:27     ` Abhinav Singh
2023-10-25 23:50     ` Andrew Morton
2023-10-25 23:50       ` Andrew Morton
2023-10-26 12:16       ` [PATCH v2] Fixing directly deferencing a __rcu pointer warning Abhinav Singh
2023-10-26 12:16         ` Abhinav Singh
2023-10-26 13:14         ` Michael S. Tsirkin
2023-10-26 13:14           ` Michael S. Tsirkin
2023-10-26 14:06           ` Mateusz Guzik
2023-10-26 14:06             ` Mateusz Guzik
2023-10-26 14:51             ` Mathieu Desnoyers
2023-10-26 14:51               ` Mathieu Desnoyers
2023-10-26 15:07               ` Mateusz Guzik
2023-10-26 15:07                 ` Mateusz Guzik
2023-10-26 15:17             ` Michael S. Tsirkin
2023-10-26 15:17               ` Michael S. Tsirkin
2023-10-26 15:37               ` Abhinav Singh
2023-10-26 15:37                 ` Abhinav Singh
2023-10-26 15:47                 ` Michael S. Tsirkin
2023-10-26 15:47                   ` Michael S. Tsirkin
2023-10-27  6:37                   ` [PATCH v3] " Abhinav Singh
2023-10-27  6:37                     ` Abhinav Singh
2023-10-27  6:41                     ` Abhinav Singh
2023-10-27  6:41                       ` Abhinav Singh
2023-10-27  7:00                       ` Michael S. Tsirkin
2023-10-27  7:00                         ` Michael S. Tsirkin
2023-10-27  6:50                     ` Michael S. Tsirkin
2023-10-27  6:50                       ` Michael S. Tsirkin
2023-10-26 12:18       ` [PATCH] Fixing warning of directly dereferencing __rcu tagged Abhinav Singh
2023-10-26 12:18         ` Abhinav Singh
2023-10-26 12:27       ` [PATCH] Fixing directly deferencing a __rcu pointer warning Abhinav Singh
2023-10-26 12:27         ` Abhinav Singh
2023-10-26 15:03         ` Peter Zijlstra
2023-10-26 15:03           ` Peter Zijlstra
2023-10-27 12:22           ` Oleg Nesterov
2023-10-27 12:22             ` Oleg Nesterov
2023-10-28 10:22             ` [PATCH v3] " Abhinav Singh
2023-10-28 10:22               ` Abhinav Singh
2023-10-28 10:31               ` Abhinav Singh
2023-10-28 10:31                 ` Abhinav Singh
2023-10-28 12:20               ` Michael S. Tsirkin
2023-10-28 12:20                 ` Michael S. Tsirkin
2023-10-28 20:43                 ` Abhinav Singh
2023-10-28 20:43                   ` Abhinav Singh
2023-10-28 20:46                   ` Abhinav Singh
2023-10-28 20:46                     ` Abhinav Singh
2023-11-03  6:30                     ` kernel test robot
2023-11-03  6:30                       ` kernel test robot
2023-11-12 19:30                       ` [PATCH v4] " Abhinav Singh
2023-11-12 19:56                         ` Mathieu Desnoyers
2023-11-12 19:58                         ` Peter Zijlstra
2023-11-12 20:18                           ` Abhinav Singh

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=c4688c53-4206-4d54-aed9-f877697e8073@gmail.com \
    --to=singhabhinav9051571833@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=brauner@kernel.org \
    --cc=linux-kernel-mentees@lists.linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=michael.christie@oracle.com \
    --cc=mjguzik@gmail.com \
    --cc=mst@redhat.com \
    --cc=npiggin@gmail.com \
    --cc=peterz@infradead.org \
    --cc=shakeelb@google.com \
    --cc=surenb@google.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.