On Wed, Jan 25, 2023 at 05:34:49PM -0800, Andrew Morton wrote: > On Wed, 25 Jan 2023 16:50:01 -0800 Suren Baghdasaryan <surenb@xxxxxxxxxx> wrote: > > > On Wed, Jan 25, 2023 at 4:22 PM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > > > > > > On Wed, 25 Jan 2023 15:35:48 -0800 Suren Baghdasaryan <surenb@xxxxxxxxxx> wrote: > > > > > > > Convert vma assignment in vm_area_dup() to a memcpy() to prevent compiler > > > > errors when we add a const modifier to vma->vm_flags. > > > > > > > > ... > > > > > > > > --- a/kernel/fork.c > > > > +++ b/kernel/fork.c > > > > @@ -482,7 +482,7 @@ struct vm_area_struct *vm_area_dup(struct vm_area_struct *orig) > > > > * orig->shared.rb may be modified concurrently, but the clone > > > > * will be reinitialized. > > > > */ > > > > - *new = data_race(*orig); > > > > + memcpy(new, orig, sizeof(*new)); > > > > > > The data_race() removal is unchangelogged? > > > > True. I'll add a note in the changelog about that. Ideally I would > > like to preserve it but I could not find a way to do that. > > > > Perhaps Paul can comment? > > I wonder if KCSAN knows how to detect this race, given that it's now in > a memcpy. I assume so. data_race() is just wrapping an expression around __kcsan_[en|dis]able_current and ensuring the expression is evaluated once and returning the correct type. I believe the following should be sufficient. diff --git a/kernel/fork.c b/kernel/fork.c index 9f7fe3541897..1b30ee568e02 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -472,7 +472,7 @@ struct vm_area_struct *vm_area_dup(struct vm_area_struct *orig) * orig->shared.rb may be modified concurrently, but the clone * will be reinitialized. */ - *new = data_race(*orig); + data_race(memcpy(new, orig, sizeof(*new))); INIT_LIST_HEAD(&new->anon_vma_chain); dup_anon_vma_name(orig, new); } I don't see how memcpy could automagically figure out whether the memcpy is prone to races or not in an arbitrary context. Assuming using data_race this way is ok then Acked-by: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> -- Mel Gorman SUSE Labs