From nobody Sat Feb 7 18:47:00 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 481E8C678D5 for ; Wed, 8 Mar 2023 16:26:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230165AbjCHQ0Z (ORCPT ); Wed, 8 Mar 2023 11:26:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38924 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230085AbjCHQ0T (ORCPT ); Wed, 8 Mar 2023 11:26:19 -0500 Received: from mail-qv1-xf29.google.com (mail-qv1-xf29.google.com [IPv6:2607:f8b0:4864:20::f29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52F28C6E65; Wed, 8 Mar 2023 08:26:16 -0800 (PST) Received: by mail-qv1-xf29.google.com with SMTP id ff4so11435499qvb.2; Wed, 08 Mar 2023 08:26:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678292775; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=dSGH6XW8GGWy2Vlt5EOF3HzragLrWkAt6Pl6/u4DucU=; b=En9ZXMIVUd6NZpo/Upabpi/wUSCx0yExcRdNjF/axSruKy2K9v6CA7OeDMP3a/ru9n pL9y2zjezsuviNzL0E6V/HZCzlzqC90vqu7LGfuG08q9vH1O0eE411zH8qUX+D/gtGE0 tSEiT6I5xfRcgCFgsfPzksV+nRLOqFCHPY18ucVNS++GJg2xfxfkOXzCC8d+b+09OF/Z bS8fbe+mIauuqeZpC97vkqdt7Y0sqyo3ZSskkmZzZFmjxZnk5N7M41AqEXZdXVK+A1gx eHODoCOX9g9owrKSLb6HJPHJjDy1UznEl8NXE104v6PUHJ0AFQeyPIAg3F36YfKq2Oqd Snpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678292775; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=dSGH6XW8GGWy2Vlt5EOF3HzragLrWkAt6Pl6/u4DucU=; b=4NMfs6fKW8zH/2/2/0+8qiuweTyC6gdvJ8AWiHwy9H6W0LQX4edhDjoHa5L8qSvJiw ExELkhOWLC7pDL7inx5l8fddbGz/geeODqHi8cpa/moJvQPLWXChiU4PKw8ZEbcblfHY 4N2ZZDMlpCEGMAxGOwtqQyCTFETAUfoIIbh/prti3KsB2hKgxhu+nS+TYrc/V6S2RRsh WnohYKc/C3Zr3pHxmXJPd6WS6QJMYeTeG5pJUwKb8il0v8expGPnzix1aQpfJT+n/fk7 ZMZorcKDNcf+oT0YViwBQp/fwLE3v42W0veCSWySIkYv4f55oaLLLPpYB0O5Naa/LD5n QA6Q== X-Gm-Message-State: AO0yUKXuMJ8qV4r12J7qYABGRQnYzzu/7MRhIu3TVyjnm+vS3Ozkj+Lw rvlBNR5D4O7IjaeHHenetvA= X-Google-Smtp-Source: AK7set9TI3vxqdtLO0j+SXqyOYnua//R3FeO4371rl129WwGAWY1BSc+8N+B24s98/n93FGr9Iq/EA== X-Received: by 2002:a05:6214:19cb:b0:570:ee5c:2953 with SMTP id j11-20020a05621419cb00b00570ee5c2953mr45162467qvc.11.1678292775368; Wed, 08 Mar 2023 08:26:15 -0800 (PST) Received: from MSI-FindNS.localdomain ([107.191.40.138]) by smtp.gmail.com with ESMTPSA id w20-20020a05620a0e9400b0073b8459d221sm11619813qkm.31.2023.03.08.08.26.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 08:26:15 -0800 (PST) From: Yue Zhao To: akpm@linux-foundation.org Cc: roman.gushchin@linux.dev, hannes@cmpxchg.org, mhocko@kernel.org, shakeelb@google.com, muchun.song@linux.dev, willy@infradead.org, linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, tangyeechou@gmail.com, Yue Zhao Subject: [PATCH v3, 1/4] mm, memcg: Prevent memory.oom.group load/store tearing Date: Thu, 9 Mar 2023 00:25:52 +0800 Message-Id: <20230308162555.14195-2-findns94@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230308162555.14195-1-findns94@gmail.com> References: <20230308162555.14195-1-findns94@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The knob for cgroup v2 memory controller: memory.oom.group 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 (the knob is usually configured long before any workloads hits actual memcg oom) but it is better to use [READ|WRITE]_ONCE to prevent compiler from doing anything funky. The access of memcg->oom_group is lockless, so it can be concurrently set at the same time as we are trying to read it. All occurrences of memcg->oom_group are updated with [READ|WRITE]_ONCE. Signed-off-by: Yue Zhao Acked-by: Michal Hocko Acked-by: Shakeel Butt --- mm/memcontrol.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 5abffe6f8389..06821e5f7604 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2067,7 +2067,7 @@ struct mem_cgroup *mem_cgroup_get_oom_group(struct ta= sk_struct *victim, * highest-level memory cgroup with oom.group set. */ for (; memcg; memcg =3D parent_mem_cgroup(memcg)) { - if (memcg->oom_group) + if (READ_ONCE(memcg->oom_group)) oom_group =3D memcg; =20 if (memcg =3D=3D oom_domain) @@ -6623,7 +6623,7 @@ static int memory_oom_group_show(struct seq_file *m, = void *v) { struct mem_cgroup *memcg =3D mem_cgroup_from_seq(m); =20 - seq_printf(m, "%d\n", memcg->oom_group); + seq_printf(m, "%d\n", READ_ONCE(memcg->oom_group)); =20 return 0; } @@ -6645,7 +6645,7 @@ static ssize_t memory_oom_group_write(struct kernfs_o= pen_file *of, if (oom_group !=3D 0 && oom_group !=3D 1) return -EINVAL; =20 - memcg->oom_group =3D oom_group; + WRITE_ONCE(memcg->oom_group, oom_group); =20 return nbytes; } --=20 2.17.1 From nobody Sat Feb 7 18:47:00 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1C8E9C678D5 for ; Wed, 8 Mar 2023 16:26:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230321AbjCHQ0g (ORCPT ); Wed, 8 Mar 2023 11:26:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39044 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230107AbjCHQ0W (ORCPT ); Wed, 8 Mar 2023 11:26:22 -0500 Received: from mail-qv1-xf34.google.com (mail-qv1-xf34.google.com [IPv6:2607:f8b0:4864:20::f34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1CECAC9A7B; Wed, 8 Mar 2023 08:26:20 -0800 (PST) Received: by mail-qv1-xf34.google.com with SMTP id bo10so11391531qvb.12; Wed, 08 Mar 2023 08:26:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678292780; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=pobmz56zWKXlv9VCRaNaOZMVD/RL8QxL/evDPGbbBYE=; b=McRkR1WhMXjVktc5aTw6T5/gz6rhdeR71Ukow2/ZzU1pNGgYskeBNM0STRwyIy0Hfm VTjxzQlU7sNL+v1NTYRQO8byhGn8P2ftwg0bNZl33Yx1hL90jCxOR3bvGXjNkeWh9G+m C3j8eWUiMVJgELYTg2oJkgiUFs3xb8VJ3e0o8SI1++jbALmILsUgu9mjOqkVEbP7RbIl TMWTLq/3F2oYXfLXSG/GLKvyAmjIjvn95772zy1qiECDYhLI3hP7yw575MZeEwjnopoj KCscHtCaCIVPuwZUB7vRCpSp6eQz5bg1OXfrbbiYqWy19G0Ga3XuBmYXT4rGuhEJ20xZ Vryg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678292780; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pobmz56zWKXlv9VCRaNaOZMVD/RL8QxL/evDPGbbBYE=; b=v9VQlEKSI2hyZCEYmYJJafwLZgPToTwR4sFVRdgWkQFlhLoH6nr/gMkvfxCHFxtJh9 3X+3WPslKFSrccYpN1F7xZ+Ns60jL8HM4BnLFw0aHyeBx13uhsyUJ0w32YGKpg45ZINa eVDpwjaluWg+YVfptCzS2CV73Aq9b7y4Xf9BbJY4zR5Y+6WWf3POb2AgduW+QoLSewVo VMWqaK6+F2KeIKudE91PceATOKe3r+kgDdENn1uChuAKvatcL9AoRfaXxhztrz1+e0yH rbY/el9P6NZZJfL9/4huMA0WBDJxjWZodBjhu4XaIuMlc2uyxpsBxcOrXWlde+GqSBHn Vr0g== X-Gm-Message-State: AO0yUKU7JyHy7dJHaz2YM/M90qKWC1oqe5fJ+APZnK9Mul7kcx5ztLmE /Gc+dzJyJynCKFp5yGLqkbxlL9/lm4La7LN+ X-Google-Smtp-Source: AK7set9fJpkEVxDTECYsrfoWBBWoQm1UPxTBvv9OtImj+CJODpxx724Aby+U/JKlSJDy6TUKlKt6aA== X-Received: by 2002:ad4:5de1:0:b0:56b:f09e:9ab0 with SMTP id jn1-20020ad45de1000000b0056bf09e9ab0mr28752380qvb.5.1678292779760; Wed, 08 Mar 2023 08:26:19 -0800 (PST) Received: from MSI-FindNS.localdomain ([107.191.40.138]) by smtp.gmail.com with ESMTPSA id w20-20020a05620a0e9400b0073b8459d221sm11619813qkm.31.2023.03.08.08.26.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 08:26:19 -0800 (PST) From: Yue Zhao To: akpm@linux-foundation.org Cc: roman.gushchin@linux.dev, hannes@cmpxchg.org, mhocko@kernel.org, shakeelb@google.com, muchun.song@linux.dev, willy@infradead.org, linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, tangyeechou@gmail.com, Yue Zhao Subject: [PATCH v3, 2/4] mm, memcg: Prevent memory.swappiness load/store tearing Date: Thu, 9 Mar 2023 00:25:53 +0800 Message-Id: <20230308162555.14195-3-findns94@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230308162555.14195-1-findns94@gmail.com> References: <20230308162555.14195-1-findns94@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The knob for cgroup v1 memory controller: memory.swappiness 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|WRITE]_ONCE to prevent compiler from doing anything funky. The access of memcg->swappiness and vm_swappiness is lockless, so both of them can be concurrently set at the same time as we are trying to read them. All occurrences of memcg->swappiness and vm_swappiness are updated with [READ|WRITE]_ONCE. Signed-off-by: Yue Zhao Acked-by: Michal Hocko Acked-by: Shakeel Butt --- include/linux/swap.h | 8 ++++---- mm/memcontrol.c | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/linux/swap.h b/include/linux/swap.h index 209a425739a9..3f3fe43d1766 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -620,18 +620,18 @@ static inline int mem_cgroup_swappiness(struct mem_cg= roup *memcg) { /* Cgroup2 doesn't have per-cgroup swappiness */ if (cgroup_subsys_on_dfl(memory_cgrp_subsys)) - return vm_swappiness; + return READ_ONCE(vm_swappiness); =20 /* root ? */ if (mem_cgroup_disabled() || mem_cgroup_is_root(memcg)) - return vm_swappiness; + return READ_ONCE(vm_swappiness); =20 - return memcg->swappiness; + return READ_ONCE(memcg->swappiness); } #else static inline int mem_cgroup_swappiness(struct mem_cgroup *mem) { - return vm_swappiness; + return READ_ONCE(vm_swappiness); } #endif =20 diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 06821e5f7604..1b0112afcad3 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4179,9 +4179,9 @@ static int mem_cgroup_swappiness_write(struct cgroup_= subsys_state *css, return -EINVAL; =20 if (!mem_cgroup_is_root(memcg)) - memcg->swappiness =3D val; + WRITE_ONCE(memcg->swappiness, val); else - vm_swappiness =3D val; + WRITE_ONCE(vm_swappiness, val); =20 return 0; } @@ -5353,7 +5353,7 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *pare= nt_css) #endif page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX); if (parent) { - memcg->swappiness =3D mem_cgroup_swappiness(parent); + WRITE_ONCE(memcg->swappiness, mem_cgroup_swappiness(parent)); memcg->oom_kill_disable =3D parent->oom_kill_disable; =20 page_counter_init(&memcg->memory, &parent->memory); --=20 2.17.1 From nobody Sat Feb 7 18:47:00 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E0A64C678D5 for ; Wed, 8 Mar 2023 16:26:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230126AbjCHQ0j (ORCPT ); Wed, 8 Mar 2023 11:26:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39404 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230196AbjCHQ0b (ORCPT ); Wed, 8 Mar 2023 11:26:31 -0500 Received: from mail-qt1-x829.google.com (mail-qt1-x829.google.com [IPv6:2607:f8b0:4864:20::829]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BC5E8CA1EF; Wed, 8 Mar 2023 08:26:24 -0800 (PST) Received: by mail-qt1-x829.google.com with SMTP id c3so18617966qtc.8; Wed, 08 Mar 2023 08:26:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678292783; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=kqeFiKRizo4EGYqriaZmF5h1PWpLfju0MvbdsBusLUQ=; b=RrUABNuCm23cw7zAS2r7lcfX6PoRi1Q4A6nYTvlFu+h/X4B289H2dUHucrYXkd+iTy hsSB64i59WWfc0uy40q5BicLg5T3NqA4EyM2HtbP9aMG90H7ysqkcwwRIBDQM+oKsL2c jPzCGI3yBDcGPpWH5BAjJXwdZxPUUwC1rqqb3BWim1UFKIptfQROIZjUOFkUF2Ymg+N5 n6LeGStUZx/yL69zcRf/KOjYv/sAPzIADkPqKSYyNQGpBeLOeQvpPCva8YqeIATfzeqG ztixlNoZ28CemrDp8oaWk6AisdpRAoEDS3zAo3qrU3z2NhNSc3zR/aUp1Y8rFBkKVIEI GWcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678292783; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kqeFiKRizo4EGYqriaZmF5h1PWpLfju0MvbdsBusLUQ=; b=Nz0OVDSBneAze1CZa2CpTmwZmT8ZVbWn0He3GdyDwG2GafhSJOsasdOZ7rs7KH1Thz zlJfvmK37MrXMEAwpdAq3rUGaKizZr3ven9l1ajtc441hp5SkB5jDKjHo0CPdds4vKCy FRU5YznokMjEpLEFxP/V2ldMCEhSv3VWHlSHgzE8Y+CihpqJHoSrfdDZjbXWIHUI4+XP B5dvD5jOln5E6d3qqYxkSgCMUdf2MJ7ucL6G+hukMlQUEQgFV017TpbGpwMup6JPKLpN 9kDQi8mmNSbBGR+ZTTUM1/qjo3/dusHjg+Qa+Rf1uBaBg+HnwfKNqJfzQSTSJRYHLS+s 7/Rg== X-Gm-Message-State: AO0yUKWGDaQCEWZQDuL2AxlfgC2kwO0FMojB+AJtF1KQdsszI5IHTG+r /a/KH3VucJGwiSsK1/5lEtA= X-Google-Smtp-Source: AK7set9S3qW7rerankN3AMXxiZeWoehZYZsS5K65VfhGp7RyFY4IEwJ/A1jtYx9iu85RIgpQlXI21Q== X-Received: by 2002:a05:622a:104c:b0:3b6:3995:2ec2 with SMTP id f12-20020a05622a104c00b003b639952ec2mr34051919qte.19.1678292783733; Wed, 08 Mar 2023 08:26:23 -0800 (PST) Received: from MSI-FindNS.localdomain ([107.191.40.138]) by smtp.gmail.com with ESMTPSA id w20-20020a05620a0e9400b0073b8459d221sm11619813qkm.31.2023.03.08.08.26.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 08:26:23 -0800 (PST) From: Yue Zhao To: akpm@linux-foundation.org Cc: roman.gushchin@linux.dev, hannes@cmpxchg.org, mhocko@kernel.org, shakeelb@google.com, muchun.song@linux.dev, willy@infradead.org, linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, tangyeechou@gmail.com, Yue Zhao Subject: [PATCH v3, 3/4] mm, memcg: Prevent memory.oom_control load/store tearing Date: Thu, 9 Mar 2023 00:25:54 +0800 Message-Id: <20230308162555.14195-4-findns94@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230308162555.14195-1-findns94@gmail.com> References: <20230308162555.14195-1-findns94@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The knob for cgroup v1 memory controller: memory.oom_control 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|WRITE]_ONCE to prevent compiler from doing anything funky. The access of memcg->oom_kill_disable is lockless, so it can be concurrently set at the same time as we are trying to read it. All occurrences of memcg->oom_kill_disable are updated with [READ|WRITE]_ONCE. Signed-off-by: Yue Zhao Acked-by: Michal Hocko Acked-by: Shakeel Butt --- mm/memcontrol.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 1b0112afcad3..5b7062d0f5e0 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1929,7 +1929,7 @@ static bool mem_cgroup_oom(struct mem_cgroup *memcg, = gfp_t mask, int order) * Please note that mem_cgroup_out_of_memory might fail to find a * victim and then we have to bail out from the charge path. */ - if (memcg->oom_kill_disable) { + if (READ_ONCE(memcg->oom_kill_disable)) { if (current->in_user_fault) { css_get(&memcg->css); current->memcg_in_oom =3D memcg; @@ -1999,7 +1999,7 @@ bool mem_cgroup_oom_synchronize(bool handle) if (locked) mem_cgroup_oom_notify(memcg); =20 - if (locked && !memcg->oom_kill_disable) { + if (locked && !READ_ONCE(memcg->oom_kill_disable)) { mem_cgroup_unmark_under_oom(memcg); finish_wait(&memcg_oom_waitq, &owait.wait); mem_cgroup_out_of_memory(memcg, current->memcg_oom_gfp_mask, @@ -4515,7 +4515,7 @@ static int mem_cgroup_oom_control_read(struct seq_fil= e *sf, void *v) { struct mem_cgroup *memcg =3D mem_cgroup_from_seq(sf); =20 - seq_printf(sf, "oom_kill_disable %d\n", memcg->oom_kill_disable); + seq_printf(sf, "oom_kill_disable %d\n", READ_ONCE(memcg->oom_kill_disable= )); seq_printf(sf, "under_oom %d\n", (bool)memcg->under_oom); seq_printf(sf, "oom_kill %lu\n", atomic_long_read(&memcg->memory_events[MEMCG_OOM_KILL])); @@ -4531,7 +4531,7 @@ static int mem_cgroup_oom_control_write(struct cgroup= _subsys_state *css, if (mem_cgroup_is_root(memcg) || !((val =3D=3D 0) || (val =3D=3D 1))) return -EINVAL; =20 - memcg->oom_kill_disable =3D val; + WRITE_ONCE(memcg->oom_kill_disable, val); if (!val) memcg_oom_recover(memcg); =20 @@ -5354,7 +5354,7 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *pare= nt_css) page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX); if (parent) { WRITE_ONCE(memcg->swappiness, mem_cgroup_swappiness(parent)); - memcg->oom_kill_disable =3D parent->oom_kill_disable; + WRITE_ONCE(memcg->oom_kill_disable, READ_ONCE(parent->oom_kill_disable)); =20 page_counter_init(&memcg->memory, &parent->memory); page_counter_init(&memcg->swap, &parent->swap); --=20 2.17.1 From nobody Sat Feb 7 18:47:00 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4856C64EC4 for ; Wed, 8 Mar 2023 16:26:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230174AbjCHQ04 (ORCPT ); Wed, 8 Mar 2023 11:26:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39510 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230309AbjCHQ0f (ORCPT ); Wed, 8 Mar 2023 11:26:35 -0500 Received: from mail-qt1-x82d.google.com (mail-qt1-x82d.google.com [IPv6:2607:f8b0:4864:20::82d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88676CB65C; Wed, 8 Mar 2023 08:26:29 -0800 (PST) Received: by mail-qt1-x82d.google.com with SMTP id s12so18598820qtq.11; Wed, 08 Mar 2023 08:26:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678292788; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=z+4uYXTHdSZJGlTQ4yJuaUKIcEogMIg606wt+PsHQ10=; b=kswqtEU7Xj6n7CisW2qiImBeQaeJAQosHCyMQLF85hJ3RIz6SE9Rt2WZbQXfYtQarS w1QOwuboYFZVWg3MH8bUqqwclcgHc3MmuZZUsydleg5jg4zMt4wgbQMRkOBzw3Zucdt8 bDfH1puKOJ2+Jws7pHS692luihVb02mlaXjFcfe/mkc0SVVtNkvvaMGjhmgRWz60Hrhj hsoZyvjuIAA64kBJePxrgKD3g/6sRoG8j42SBuX/XEEqcwDNrw4HvoAAvVN3G64Ld9aT Efv9BEBWmzR2cSAbKApAMZDiqB5AIM5zyFGrDWK2hfiWrdLkaCvW3wS224bS2oq9JkyC BQvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678292788; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=z+4uYXTHdSZJGlTQ4yJuaUKIcEogMIg606wt+PsHQ10=; b=nAar0eay/qUiVhrG6/siwQ138i+Btlf7NSquoM8pTduoDhdDLt81WOuYpU5Tnquuiy WLQGEu4JUAhwf8338yGQ4tHRHpdHtOBUT74OvMdgUjRNVyNg3SW2z82/nlpGNmpf+luh j2GGxn5OxMBCuzSmpHrbZtZt+kmOnF9RAC2Eb6A147uKkUmty+pjqLaYeUtbRITCf2Ns rKtVgSadH0OB2jXdHPMCdWjWJnH0mxmX2MtGNCaShO9Sq/Ty6ei4BMPNJ3KTtpAXGv7B cjgpTOpx3pOC2p1Q7td2B2vrvGcQuPhf5ch80KTV6mMkHk5hwDgyQ7+HHdjB2LDnGOwa R9Hw== X-Gm-Message-State: AO0yUKVHtcWzUSVgvIflb4j8y2nCVapEmaSSMEXtUIsBpgKV41DZSIgE zYWGkkco291ieAQgEVou4jM= X-Google-Smtp-Source: AK7set+0qHmJ/1GfUszz/r9Eo2DlcBq2rsqeob7MHbP84HYNS4R6ufmoVsorbLyoGDsjhwgPzL4ESw== X-Received: by 2002:a05:622a:4c6:b0:3bf:cd7a:dd14 with SMTP id q6-20020a05622a04c600b003bfcd7add14mr30017906qtx.12.1678292788636; Wed, 08 Mar 2023 08:26:28 -0800 (PST) Received: from MSI-FindNS.localdomain ([107.191.40.138]) by smtp.gmail.com with ESMTPSA id w20-20020a05620a0e9400b0073b8459d221sm11619813qkm.31.2023.03.08.08.26.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Mar 2023 08:26:28 -0800 (PST) From: Yue Zhao To: akpm@linux-foundation.org Cc: roman.gushchin@linux.dev, hannes@cmpxchg.org, mhocko@kernel.org, shakeelb@google.com, muchun.song@linux.dev, willy@infradead.org, linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, tangyeechou@gmail.com, Yue Zhao Subject: [PATCH v3, 4/4] mm, memcg: Prevent memory.soft_limit_in_bytes load/store tearing Date: Thu, 9 Mar 2023 00:25:55 +0800 Message-Id: <20230308162555.14195-5-findns94@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230308162555.14195-1-findns94@gmail.com> References: <20230308162555.14195-1-findns94@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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|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. All occurrences of memcg->soft_limit are updated with [READ|WRITE]_ONCE. Signed-off-by: Yue Zhao Acked-by: Michal Hocko Acked-by: Shakeel Butt --- mm/memcontrol.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 5b7062d0f5e0..13ec89c45389 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3728,7 +3728,7 @@ static u64 mem_cgroup_read_u64(struct cgroup_subsys_s= tate *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_fi= le *of, if (IS_ENABLED(CONFIG_PREEMPT_RT)) { ret =3D -EOPNOTSUPP; } else { - memcg->soft_limit =3D nr_pages; + WRITE_ONCE(memcg->soft_limit, nr_pages); ret =3D 0; } break; @@ -5347,7 +5347,7 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *pare= nt_css) return ERR_CAST(memcg); =20 page_counter_set_high(&memcg->memory, PAGE_COUNTER_MAX); - memcg->soft_limit =3D PAGE_COUNTER_MAX; + WRITE_ONCE(memcg->soft_limit, PAGE_COUNTER_MAX); #if defined(CONFIG_MEMCG_KMEM) && defined(CONFIG_ZSWAP) memcg->zswap_max =3D PAGE_COUNTER_MAX; #endif @@ -5502,7 +5502,7 @@ static void mem_cgroup_css_reset(struct cgroup_subsys= _state *css) page_counter_set_min(&memcg->memory, 0); page_counter_set_low(&memcg->memory, 0); page_counter_set_high(&memcg->memory, PAGE_COUNTER_MAX); - memcg->soft_limit =3D PAGE_COUNTER_MAX; + WRITE_ONCE(memcg->soft_limit, PAGE_COUNTER_MAX); page_counter_set_high(&memcg->swap, PAGE_COUNTER_MAX); memcg_wb_domain_size_changed(memcg); } --=20 2.17.1