On Mon 06-03-23 23:41:38, Yue Zhao wrote: > The knob for cgroup v1 memory controller: memory.soft_limit_in_bytes > is not protected by any locking so it can be modified while it is used. > This is not an actual problem because races are unlikely. > But it is better to use READ_ONCE/WRITE_ONCE to prevent compiler from > doing anything funky. > > The access of memcg->soft_limit is lockless, > so it can be concurrently set at the same time as we are > trying to read it. Similar here. mem_cgroup_css_reset and mem_cgroup_css_alloc are not covered. > > Signed-off-by: Yue Zhao <findns94@xxxxxxxxx> > --- > mm/memcontrol.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 26605b2f51b1..20566f59bbcb 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -3728,7 +3728,7 @@ static u64 mem_cgroup_read_u64(struct cgroup_subsys_state *css, > case RES_FAILCNT: > return counter->failcnt; > case RES_SOFT_LIMIT: > - return (u64)memcg->soft_limit * PAGE_SIZE; > + return (u64)READ_ONCE(memcg->soft_limit) * PAGE_SIZE; > default: > BUG(); > } > @@ -3870,7 +3870,7 @@ static ssize_t mem_cgroup_write(struct kernfs_open_file *of, > if (IS_ENABLED(CONFIG_PREEMPT_RT)) { > ret = -EOPNOTSUPP; > } else { > - memcg->soft_limit = nr_pages; > + WRITE_ONCE(memcg->soft_limit, nr_pages); > ret = 0; > } > break; > -- > 2.17.1 -- Michal Hocko SUSE Labs