lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Sun, 04 Feb 2024 09:28:06 +0800
From: "Huang, Ying" <ying.huang@...el.com>
To: Valentin Schneider <vschneid@...hat.com>
Cc: Pierre Gondois <pierre.gondois@....com>,  linux-kernel@...r.kernel.org,
  Shrikanth Hegde <sshegde@...ux.vnet.ibm.com>,  Ingo Molnar
 <mingo@...hat.com>,  Peter Zijlstra <peterz@...radead.org>,  Juri Lelli
 <juri.lelli@...hat.com>,  Vincent Guittot <vincent.guittot@...aro.org>,
  Dietmar Eggemann <dietmar.eggemann@....com>,  Steven Rostedt
 <rostedt@...dmis.org>,  Ben Segall <bsegall@...gle.com>,  Mel Gorman
 <mgorman@...e.de>,  Daniel Bristot de Oliveira <bristot@...hat.com>
Subject: Re: [PATCH v2 1/3] sched/topology: Annotate RCU pointers properly

Valentin Schneider <vschneid@...hat.com> writes:

> On 16/01/24 09:23, Huang, Ying wrote:
>> Pierre Gondois <pierre.gondois@....com> writes:
>>
>>> Cleanup RCU-related spare errors by annotating RCU pointers.
>>>
>>> sched_domains_numa_distance:
>>>   error: incompatible types in comparison expression
>>>   (different address spaces):
>>>       int [noderef] __rcu *
>>>       int *
>>>
>>> sched_domains_numa_masks:
>>>   error: incompatible types in comparison expression
>>>   (different address spaces):
>>>       struct cpumask **[noderef] __rcu *
>>>       struct cpumask ***
>>>
>>> The cast to (void *) adds the following sparse warning:
>>>   warning: cast removes address space '__rcu' of expression
>>> but this should be normal.
>>>
>>> Fixes: 0fb3978b0aac ("sched/numa: Fix NUMA topology for systems with CPU-less nodes")
>>> Signed-off-by: Pierre Gondois <pierre.gondois@....com>
>>> ---
>>>  kernel/sched/topology.c | 12 ++++++------
>>>  1 file changed, 6 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
>>> index 10d1391e7416..2a2da9b33e31 100644
>>> --- a/kernel/sched/topology.c
>>> +++ b/kernel/sched/topology.c
>>> @@ -1542,8 +1542,8 @@ static int			sched_domains_numa_levels;
>>>  static int			sched_domains_curr_level;
>>>
>>>  int				sched_max_numa_distance;
>>> -static int			*sched_domains_numa_distance;
>>> -static struct cpumask		***sched_domains_numa_masks;
>>> +static int			__rcu *sched_domains_numa_distance;
>>> +static struct cpumask		** __rcu *sched_domains_numa_masks;
>>>  #endif
>>>
>>>  /*
>>> @@ -1988,8 +1988,8 @@ void sched_init_numa(int offline_node)
>>>
>>>  static void sched_reset_numa(void)
>>>  {
>>> -	int nr_levels, *distances;
>>> -	struct cpumask ***masks;
>>> +	int nr_levels, __rcu *distances;
>>> +	struct cpumask ** __rcu *masks;
>>
>> No.  distances and masks are not accessed via RCU in the function.
>> Instead, they should be assigned like below,
>>
>>          distances = rcu_dereference_raw(sched_domains_numa_distance);
>>
>> Because sched_domains_numa_distance is protected by cpu_hotplug_lock,
>> but the lock is static.  Some comments are deserved.
>>
>> Anyway, please read RCU document before making the change.
>>
>
> IIUC, something like so could also do?
>
>   distances = rcu_dereference_check(sched_domains_numa_distance, lockdep_is_cpus_held());

Yes.  You are right.  We should do that.

--
Best Regards,
Huang, Ying

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ