mm: memcg: use READ_ONCE()/WRITE_ONCE() to access stock->cached
authorRoman Gushchin <roman.gushchin@linux.dev>
Tue, 2 May 2023 16:08:39 +0000 (09:08 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 9 Jun 2023 23:25:13 +0000 (16:25 -0700)
commitf785a8f21a9cc46fced9f53c51a6f2dc647ed484
tree683fa0722c0137261559ac4aa04df6019abd8fcd
parent3b8abb3239530c423c0b97e42af7f7e856e1ee96
mm: memcg: use READ_ONCE()/WRITE_ONCE() to access stock->cached

A memcg pointer in the percpu stock can be accessed by drain_all_stock()
from another cpu in a lockless way.  In theory it might lead to an issue,
similar to the one which has been discovered with stock->cached_objcg,
where the pointer was zeroed between the check for being NULL and
dereferencing.  In this case the issue is unlikely a real problem, but to
make it bulletproof and similar to stock->cached_objcg, let's annotate all
accesses to stock->cached with READ_ONCE()/WTRITE_ONCE().

Link: https://lkml.kernel.org/r/20230502160839.361544-2-roman.gushchin@linux.dev
Signed-off-by: Roman Gushchin <roman.gushchin@linux.dev>
Acked-by: Shakeel Butt <shakeelb@google.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Yosry Ahmed <yosryahmed@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/memcontrol.c