From nobody Mon Oct 6 11:55:34 2025 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE6801A76D4; Tue, 22 Jul 2025 01:40:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148450; cv=none; b=TrKZkLDVX9xmvIYGiiex/Ze9MfoVWTZQlaamTMRKpyxd2y+1JLQKUSg96TzLilj81dL0wC2Y5Hysr4T/Mvm1c62WlWgprJPX3DrCwyuIunLwWM6m1Y0cWON5mouFRpVlKFUxLRzHzzxHQ+4qs4vl+DQvVu69agX2QsQX2iSnrw0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148450; c=relaxed/simple; bh=3hu7wHkhpX+aYHmMAybjtrvkJSA+unVqx8yFgpVZLSc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cozuaLxNbq9OU+tyJr938VeQ/aVuOJghT1DccPggRGFbG67v+UbdkJeidoNe4rGG4/HD46WeIvGBpcR0qEJRB286mNPSyHcAxFfMk8AeesbYCSXZ709lTHo5CaBdbJAe7cZPrfDySF64kYX5kxPZB6pKVwYb1YigdhARFph4fKI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gfY07OaC; arc=none smtp.client-ip=209.85.210.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gfY07OaC" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-74b52bf417cso3257057b3a.0; Mon, 21 Jul 2025 18:40:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753148448; x=1753753248; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cpioRhlrYEnhflNoi/6xqIajRAkPUX1YjkOJ/I3fK4E=; b=gfY07OaCl4Jfq+sJVAaoKdzNmBSUqB25rHwvb6ShFuz/HURClOGrW702OhhoiN2zGn NUCNBgwps1mTCnpUidx3Ws6fTpXwaxEkFrm6mWQMVyO8/CZelknoLU5KstgnjYuUpPFf uwuTuSNZH9OCkn9+/OtdB3SzNbKR54WZWoMzyyM1n3Pp/xekHjde/w0PPsdz6QHBf4um kvmJLL3jSMjDpvDtemjzV49FOd3Jil5blNGsRPoArxjYE8Id2esBBkftAWXXZt/3SX3/ eJ+qlDE4HLD7FLCiNQyWHs2T2zk1ZA3Mj5bhXcN5UXbL5cvTc96orytxir0mNP4d5n6T 3qBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753148448; x=1753753248; h=content-transfer-encoding:mime-version: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=cpioRhlrYEnhflNoi/6xqIajRAkPUX1YjkOJ/I3fK4E=; b=ZUaxnnRohfX0DBW9r3I79I91VTGuGpZa9wGBVB9qvUOp9JzSOWE+/M0Sl8FSTAv2fn W4ApHxPSajeihT0LJ95eHH9IU5X3kSHSI5f6CYlGvTKdBVWVqCsiZXEjd2mRKndmOmBe bvbamo7dyUZDWpzAATefBCj8UG+ow9XtcUxGTNstPE7S8D75+XFUxXT4ihZGyYqBMtUb H3CGZsCJLrmpNlTVpyZ7s9mFFeMUzbqZGVBBiE1RYsdQeu5KJuRmjGoBOMkh/r/2ocmS cMtsT+XIoui6BYah/3biWFt2Srt9M9m5Fs6BfchZ4iGBWEK9CjsDAA+TfJM3On2VyVYV v5Bw== X-Forwarded-Encrypted: i=1; AJvYcCWcN0AmzgKC0wpleDdb371fKBnkPXm+YWIg9fpZ+IqOU5ZgJu5Cm6n4nyQlJAVVvHWbN+9+M3DJ@vger.kernel.org X-Gm-Message-State: AOJu0YzP/l6iDyWQAQ3A4yLwACjTrOSc6MBbnoVOaMUMbmlE5Cq8nG9G xGvICveOD/ctds2IOEl09cq7PFRD+HP9yC5kebbdoW5/uX2npQU60aEq X-Gm-Gg: ASbGncv91jg8vwcjH8z/LwcgXFNvwnpfUXS0PW9gWqVOg1L2cNTGaXyUPIfCa9yLBoO uBHkoq49rQBqP/2s1he7aNR33/3RDHIqQSZ1ekaJwbpCih7XAqfGjcuwKTbOQ2uVZVW4zUZiusm xMWWH12lmXRsR+KpWUrw3Ygb3l5jhaqJKaJmR6gKlyumZJN3sVbcbOXkA7cQwVUsmp0e8hya3He 5kMzW+MpCqlfOkfGDAkesWKP2CglV6XqBXP0fDq9ZxCjMTj2+xfWmdmT/u2EI30ZBTBFvAbpW4i o0uj32FTDmJ2WRgKjwnJhkN3ObxFjCsM099Wgv2nAW9/0KzcUtvkGhfzSZl504UZNsNA9amNqr4 hd0Q66GZFOaw7p251CBNNzV3IbN/ANBhO7ZpSblQvi7TPKaZQ X-Google-Smtp-Source: AGHT+IH5hk/c/I6OKPgLS9u4RoARnHXIWja8vD1Mb7zDk6Fp0Qi0jcGgkmA52GvBYzfRi6ilZZv9wg== X-Received: by 2002:a05:6a00:2387:b0:746:3025:6576 with SMTP id d2e1a72fcca58-75723d7d236mr28114641b3a.14.1753148448131; Mon, 21 Jul 2025 18:40:48 -0700 (PDT) Received: from jpkobryn-fedora-PF5CFKNC.lan ([73.222.117.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-759cb15699esm6584089b3a.82.2025.07.21.18.40.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Jul 2025 18:40:47 -0700 (PDT) From: JP Kobryn To: tj@kernel.org, shakeel.butt@linux.dev, mkoutny@suse.com, yosryahmed@google.com, hannes@cmpxchg.org, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, kernel-team@meta.com Subject: [PATCH 1/5 cgroup/for-6.16-fixes] cgroup: add exclusive css rstat init/exit api for base stats Date: Mon, 21 Jul 2025 18:40:26 -0700 Message-ID: <20250722014030.297537-2-inwardvessel@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250722014030.297537-1-inwardvessel@gmail.com> References: <20250722014030.297537-1-inwardvessel@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It is known at call sites of css_rstat_init/exit() whether the given css is associated with the base stats or a formal subsystem. Instead of passing &cgrp->self or css to a shared API, offer an additional init/exit API pair for exclusive use with the base stats. Make use of this new API to make existing code more readable and also to prepare for refactoring the complex css rstat init/exit logic. Signed-off-by: JP Kobryn Reported-by: syzbot+8d052e8b99e40bc625ed@syzkaller.appspotmail.com --- kernel/cgroup/cgroup-internal.h | 2 ++ kernel/cgroup/cgroup.c | 11 ++++++----- kernel/cgroup/rstat.c | 27 +++++++++++++++++++++++---- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/kernel/cgroup/cgroup-internal.h b/kernel/cgroup/cgroup-interna= l.h index b14e61c64a34..24fca840bf1c 100644 --- a/kernel/cgroup/cgroup-internal.h +++ b/kernel/cgroup/cgroup-internal.h @@ -270,6 +270,8 @@ int cgroup_task_count(const struct cgroup *cgrp); /* * rstat.c */ +int cgroup_rstat_base_init(struct cgroup *cgrp); +void cgroup_rstat_base_exit(struct cgroup *cgrp); int css_rstat_init(struct cgroup_subsys_state *css); void css_rstat_exit(struct cgroup_subsys_state *css); int ss_rstat_init(struct cgroup_subsys *ss); diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index a723b7dc6e4e..d684d33236b8 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -2149,7 +2149,7 @@ int cgroup_setup_root(struct cgroup_root *root, u16 s= s_mask) if (ret) goto destroy_root; =20 - ret =3D css_rstat_init(&root_cgrp->self); + ret =3D cgroup_rstat_base_init(root_cgrp); if (ret) goto destroy_root; =20 @@ -2190,7 +2190,7 @@ int cgroup_setup_root(struct cgroup_root *root, u16 s= s_mask) goto out; =20 exit_stats: - css_rstat_exit(&root_cgrp->self); + cgroup_rstat_base_exit(root_cgrp); destroy_root: kernfs_destroy_root(root->kf_root); root->kf_root =3D NULL; @@ -5446,13 +5446,13 @@ static void css_free_rwork_fn(struct work_struct *w= ork) struct cgroup *cgrp =3D css->cgroup; =20 percpu_ref_exit(&css->refcnt); - css_rstat_exit(css); =20 if (!css_is_self(css)) { /* css free path */ struct cgroup_subsys_state *parent =3D css->parent; int id =3D css->id; =20 + css_rstat_exit(css); ss->css_free(css); cgroup_idr_remove(&ss->css_idr, id); cgroup_put(cgrp); @@ -5477,6 +5477,7 @@ static void css_free_rwork_fn(struct work_struct *wor= k) cgroup_put(cgroup_parent(cgrp)); kernfs_put(cgrp->kn); psi_cgroup_free(cgrp); + cgroup_rstat_base_exit(cgrp); kfree(cgrp); } else { /* @@ -5742,7 +5743,7 @@ static struct cgroup *cgroup_create(struct cgroup *pa= rent, const char *name, * Now that init_cgroup_housekeeping() has been called and cgrp->self * is setup, it is safe to perform rstat initialization on it. */ - ret =3D css_rstat_init(&cgrp->self); + ret =3D cgroup_rstat_base_init(cgrp); if (ret) goto out_kernfs_remove; =20 @@ -5818,7 +5819,7 @@ static struct cgroup *cgroup_create(struct cgroup *pa= rent, const char *name, out_psi_free: psi_cgroup_free(cgrp); out_stat_exit: - css_rstat_exit(&cgrp->self); + cgroup_rstat_base_exit(cgrp); out_kernfs_remove: kernfs_remove(cgrp->kn); out_cancel_ref: diff --git a/kernel/cgroup/rstat.c b/kernel/cgroup/rstat.c index cbeaa499a96a..8c3cb4a989ad 100644 --- a/kernel/cgroup/rstat.c +++ b/kernel/cgroup/rstat.c @@ -437,11 +437,10 @@ __bpf_kfunc void css_rstat_flush(struct cgroup_subsys= _state *css) } } =20 -int css_rstat_init(struct cgroup_subsys_state *css) +static int __css_rstat_init(struct cgroup_subsys_state *css, bool is_self) { struct cgroup *cgrp =3D css->cgroup; int cpu; - bool is_self =3D css_is_self(css); =20 if (is_self) { /* the root cgrp has rstat_base_cpu preallocated */ @@ -481,7 +480,7 @@ int css_rstat_init(struct cgroup_subsys_state *css) return 0; } =20 -void css_rstat_exit(struct cgroup_subsys_state *css) +static void __css_rstat_exit(struct cgroup_subsys_state *css, bool is_self) { int cpu; =20 @@ -499,7 +498,7 @@ void css_rstat_exit(struct cgroup_subsys_state *css) return; } =20 - if (css_is_self(css)) { + if (is_self) { struct cgroup *cgrp =3D css->cgroup; =20 free_percpu(cgrp->rstat_base_cpu); @@ -510,6 +509,26 @@ void css_rstat_exit(struct cgroup_subsys_state *css) css->rstat_cpu =3D NULL; } =20 +int css_rstat_init(struct cgroup_subsys_state *css) +{ + return __css_rstat_init(css, false); +} + +void css_rstat_exit(struct cgroup_subsys_state *css) +{ + return __css_rstat_exit(css, false); +} + +int cgroup_rstat_base_init(struct cgroup *cgrp) +{ + return __css_rstat_init(&cgrp->self, true); +} + +void cgroup_rstat_base_exit(struct cgroup *cgrp) +{ + __css_rstat_exit(&cgrp->self, true); +} + /** * ss_rstat_init - subsystem-specific rstat initialization * @ss: target subsystem --=20 2.47.1 From nobody Mon Oct 6 11:55:34 2025 Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 989AA1BE238; Tue, 22 Jul 2025 01:40:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148452; cv=none; b=NqiLPcWWSlRRvCGk3lCeXUNYJPQG+2X1CYrHimjA3LcITkaQYHzfSUEw+ozzHwUgDwHYaDsRgiDw1TBEusRhk9FTdMKX8cgQEDLzkIJTUaJKfEOwNFBJY8btZTWr+rjkuR+XSuwCDNXEeZhWXRY9txAmwVBoEpwjOOY9qEhtWuo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148452; c=relaxed/simple; bh=qNXCaNPgvsWVIPwi//yyskzPWPkGW+HCMHmUQPY2xjk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mhZHu7mdGBVn1ozHgh4n8PIXUxJqRD8p7aV8T9vPcCLoNHB1l6YGQDjshrgSJMNQvc6Jwc/X0EjuSg9qxLaiW0q/PSr/QKXxc4f4v5iQkFDWEmvACgCZTQNuaENbfGGb7XDK+RvbAFjyRj74wLWjKhwXB84RB0skwc+Yu235HZM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZNDFkUvt; arc=none smtp.client-ip=209.85.210.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZNDFkUvt" Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-7490acf57b9so3365501b3a.2; Mon, 21 Jul 2025 18:40:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753148450; x=1753753250; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hACIdTG8BKAR62jfoHAS+U9Tvdlt+mbDlCD3cFo5QMk=; b=ZNDFkUvtKLwm5X7GS2jNBa1aEjK/WzpnwPRNJYI0ONXNELjKw7PVClEdkD2U671b2n 8kiis9FbZws1PHZwjg8SjEiMKwgqG8NuKFNaCxdtZAYdjKOcFN0B78fykOL20PWE2JwF bRoO9ym1X4+A+fZkknrerOTEmE9jK/2w1l3v+D84p7SB56zz+cQ8PsRst0stglsyKvqu uJjRSnN4hpIa+6VUPAyq0Awn0XCiuwm9a/szrFfHnR2U/CQmQ38s9K4n0I/of5l3Yq+J zaCk1A94hExRxGrkwn+E5iWN8nbklbR+d6o4T+igNdYpxivM1z/AgwvXanGHbkfWRSl1 cOPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753148450; x=1753753250; h=content-transfer-encoding:mime-version: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=hACIdTG8BKAR62jfoHAS+U9Tvdlt+mbDlCD3cFo5QMk=; b=Ugbr+jr2Cw8Gf+mh06aZW6n64pHZ0YQj7Nqbll4Vfr0mIZO3G5wr4+cawvpV60oyLs 5tAndWZcs/RVvWuCD1g1dNMNyNrn9u7rVME1YWLYvLaOOJKscbEc++OXZwbT65i1O5bE /KrRgIj7CTuNVO4PRPHdpyRGVh8DWGzyCbH9lg62q6tpOgh0S1ToTjcONwk/3nd32kZa Hbd4H/XjL+Paj0zpyrtpZZfY6n3g75g9wujxiEJP/VNRt9AyxvF+sqrWg6fMWoX5c2/n d5DLH6rmu/bxXMUqvu+r5K8Asmq8fN2ZtpC29JDlShYXU/iZPbNXX4QYAlfeFc1ihmcg kYkw== X-Forwarded-Encrypted: i=1; AJvYcCVJMNeL295rS2ecRCmYWjzlMvTYBk/VhNx6fW1oYHIcP4Tr83CxJ4xSAKQ5gjuI28LWoiX0QyxX@vger.kernel.org X-Gm-Message-State: AOJu0YxCtPNqoy5OhspyQGIRMdyI6gSXLwo+hPaz60MQgEeQpy/RUB+d BlcvceLD+T6I6Oqk/LVKwHV5cXz+JlSNez5f1b+RadsZQJ2IgXy0A1Fm X-Gm-Gg: ASbGncvPBHk6+TIg6EgaVhwNJa4FSDMWrqfM8ccdiic0h95kwu97tCUSv3liLeYllz1 UvhkfqAoqBZ5dCAsFF3cxtZGmlbNPkR4SbsFvJn3U+jQ6OVbgtT3rEtmi0aS7GfzQn7lRH/WrfB c1oN9wNHZyuwk8uwkUQqwZw0L3rLxYKdSsem98suxsE2l/IsIU8FcWqDqrwSD2t2iWDng4ADLoE mKONmJStlPiQRQ7nOV9TaVZg7gM6M+uMpXHoA8r3nJduIgY5fg0otNNLahLcxaBzTFO0Jie/KZT vRNntWc3F3ngJRpRAg+n39uLE7y8hojdgGeC1LT+6Vf3pwgxwYg6q1UyujMqdJN2mDpo8QZjjqJ ZRG5O6IUOuQu9eHeTf47UYzWqCdOAQoVeyUmFGFtMAVYj9Oxb X-Google-Smtp-Source: AGHT+IG5c+3T6hAi7v9Hkfw0uHGwJqw2xISlFMEaOfnJnJxDre4YxxnyciqKUVm7GW4eNxA5XPdvWQ== X-Received: by 2002:a05:6a20:3c8d:b0:222:1802:2ddb with SMTP id adf61e73a8af0-23810667018mr33711833637.8.1753148450008; Mon, 21 Jul 2025 18:40:50 -0700 (PDT) Received: from jpkobryn-fedora-PF5CFKNC.lan ([73.222.117.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-759cb15699esm6584089b3a.82.2025.07.21.18.40.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Jul 2025 18:40:49 -0700 (PDT) From: JP Kobryn To: tj@kernel.org, shakeel.butt@linux.dev, mkoutny@suse.com, yosryahmed@google.com, hannes@cmpxchg.org, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, kernel-team@meta.com Subject: [PATCH 2/5 cgroup/for-6.16-fixes] cgroup: check for rstat flush callback at css rstat init/exit call sites Date: Mon, 21 Jul 2025 18:40:27 -0700 Message-ID: <20250722014030.297537-3-inwardvessel@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250722014030.297537-1-inwardvessel@gmail.com> References: <20250722014030.297537-1-inwardvessel@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The css rstat init/exit functions have a dependency on the associated subsystem which is inspected to see if the flush callback exists. Move this logic out of these functions and instead let callers perform this check in advance. This decoupling allows greater flexibility in where css_rstat_init() may be called. Signed-off-by: JP Kobryn Reported-by: syzbot+8d052e8b99e40bc625ed@syzkaller.appspotmail.com --- kernel/cgroup/cgroup.c | 18 ++++++++++++------ kernel/cgroup/rstat.c | 6 +----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index d684d33236b8..b034f47580f6 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -5452,7 +5452,9 @@ static void css_free_rwork_fn(struct work_struct *wor= k) struct cgroup_subsys_state *parent =3D css->parent; int id =3D css->id; =20 - css_rstat_exit(css); + if (ss->css_rstat_flush) + css_rstat_exit(css); + ss->css_free(css); cgroup_idr_remove(&ss->css_idr, id); cgroup_put(cgrp); @@ -5679,9 +5681,11 @@ static struct cgroup_subsys_state *css_create(struct= cgroup *cgrp, goto err_free_css; css->id =3D err; =20 - err =3D css_rstat_init(css); - if (err) - goto err_free_css; + if (ss->css_rstat_flush) { + err =3D css_rstat_init(css); + if (err) + goto err_free_css; + } =20 /* @css is ready to be brought online now, make it visible */ list_add_tail_rcu(&css->sibling, &parent_css->children); @@ -6141,8 +6145,10 @@ static void __init cgroup_init_subsys(struct cgroup_= subsys *ss, bool early) css->id =3D cgroup_idr_alloc(&ss->css_idr, css, 1, 2, GFP_KERNEL); BUG_ON(css->id < 0); =20 - BUG_ON(ss_rstat_init(ss)); - BUG_ON(css_rstat_init(css)); + if (ss->css_rstat_flush) { + BUG_ON(ss_rstat_init(ss)); + BUG_ON(css_rstat_init(css)); + } } =20 /* Update the init_css_set to contain a subsys diff --git a/kernel/cgroup/rstat.c b/kernel/cgroup/rstat.c index 8c3cb4a989ad..ba656a53136a 100644 --- a/kernel/cgroup/rstat.c +++ b/kernel/cgroup/rstat.c @@ -449,8 +449,7 @@ static int __css_rstat_init(struct cgroup_subsys_state = *css, bool is_self) if (!cgrp->rstat_base_cpu) return -ENOMEM; } - } else if (css->ss->css_rstat_flush =3D=3D NULL) - return 0; + } =20 /* the root cgrp's self css has rstat_cpu preallocated */ if (!css->rstat_cpu) { @@ -484,9 +483,6 @@ static void __css_rstat_exit(struct cgroup_subsys_state= *css, bool is_self) { int cpu; =20 - if (!css_uses_rstat(css)) - return; - css_rstat_flush(css); =20 /* sanity check */ --=20 2.47.1 From nobody Mon Oct 6 11:55:34 2025 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ECC581DE3AB; Tue, 22 Jul 2025 01:40:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148454; cv=none; b=XSk2TIpTHXG4yocTBSA7YHu5vYYFRV6l5c8ZsdiCnPbe9cZXQTuIKJQjncqYtCyU14TF1xuUNHzH3m1RY8z3kBmhaIs3Od0Anq0OeebwhYucK+yffyq1HKtA7bk0Bbw+ZJBk+xPaEGAmPB35d/K4jI3KIl8dDfuX20chPz/hb8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148454; c=relaxed/simple; bh=ISAX7fKcvxJYGebYef7SJczmeqKoTClEaeP3mts1XKw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L1pCQmaDyZUOknK4LJ7uyg76FPd4sGTP2MmSLcpbIuelTUgF5SYJLh2VAs7d06X6jU1F2NMPvP74U6aTJWsatxIHspCcDXPgGXfg6Z08JpR0QV5CJHzGGxdOHwjGWTQhuO3Jwb5g5Dua6U8HfQTuPFCufcIs228Jgf8zPdtJ4eI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eAs+iEEI; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eAs+iEEI" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-75ce8f8a3a1so951805b3a.3; Mon, 21 Jul 2025 18:40:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753148452; x=1753753252; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BpVNDn7PZTho9MNu8qCg7LCZBl9gEjfCHcUDBMSEILQ=; b=eAs+iEEIUjBy+WxL/wUwZj9eH/3zUd8jHI2+SW5W38J1s1dHer2GJc7J5o76LKE9MF QVvwDfm8toZWV9QtO182m/QWE6nPXI5voPM5OgmSyjKnlNMJHso92MhA94wHGuMjHsuL cAZo3Zzu+GCmBybPeHaF12JPTRjG9wIXZNZ/xweiUSM5MLqNN/CDYJCf7I21kVTP/nDf 53Kuf0yl9iuv8amAe6lxiypbwpkscONZcKqH4e5z33MzvrBmmrm0cWU836sl94cC+36f EHmMI7f7YuCjywYjzE9H1fgJSNDHBr1zrslgzDAJgQMwIZkrv18N7qwN4tfBxHhN9VRd iP4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753148452; x=1753753252; h=content-transfer-encoding:mime-version: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=BpVNDn7PZTho9MNu8qCg7LCZBl9gEjfCHcUDBMSEILQ=; b=S9p5Tj30Gezf7Y3w9m0gS+ynDkl9vp4j2VlG1YWoF8uRo0kYYz4Opyp1iubDhOehh3 HfNn2Oa66UTZjJq97G89jtcTOUS+wR2KkRAAkZYoxGe6QzkVKKnaUkZQawkUoqjkiYqu AxBlQiYsJK0e76K25dYdTCweJiLO95CcJXtyzD4fjj84FLXWl0R+fXwP/Wv9y5mqpTBO DcvdSLEB8DCO3LZ/IRTjtb4DwJNu1ftNnmkEDJ7laUxMcj2UqqOfsXgxdPfXeWQY4OX0 a/5lAjh9e0nptBIGaWn1QTBqmTzxd/H4OCLMQ4iQjqxoQwT5CR0evmi9JOU1KBJkgiCg 3Mjw== X-Forwarded-Encrypted: i=1; AJvYcCVMndFiaiUmJE0kPIRz7no82VTP/b/Ub6cQPQ9SOZ+VerWbTHNLJ/NMvMZKWAoXUH24/9U8sGyZ@vger.kernel.org X-Gm-Message-State: AOJu0Yy+KU8UG/8mNtWhJdNe2dbHaOHn0WNWUaJsyEz3ZpzSW+S9y/XP h306O/7DHUNGowZPlo+TCpAJOaM/FWDvmd4XRCqWA2Lebn5egRD4saq+ X-Gm-Gg: ASbGncvrjD0BX41GFmVrbNiXicGfB91xJ8/9CIiOtJbn+p6CtRMTKy6WGCY/C71QoKP 3tscMOvAS6+MG7pUGUbreF7IbXXKozUVQM0qxKH8UIAuA3plQX4hbydZRsqONk3rVpElJ4KI8w6 kvw3H+f9yBT/qzQVYDLwpx5SyMrU6nrr9v82dh3ciVeYh0eNi/BpFLvzFkXB+tRty3dhe4fWPSk lWFHARiVK8IK47Ohro2B2lvAYBC+Ycqz5cW+fh6dU6FWneoZLJoLWTz+/wDOg3GwDNwq30Cz7Se zk7gqOy3NZ75gFkfSwpyrUxtX/JEwuyuAjqCSClZiCw/k4jqgbxtt93IBxfq0PlRAVyyIkUT3vM 2+iYl50s336K0Emvd4qJDS38zwQgKtWlx9sbtrhNZrKk6913h X-Google-Smtp-Source: AGHT+IGCss3lZ7t1Z9Z+ms6vwllYpjQ7KiwnLlw3ogzBFFE0uLP5/w6oP0Q6HZxTipquAPk4Y4dChQ== X-Received: by 2002:a05:6a00:4f89:b0:74d:247f:fae4 with SMTP id d2e1a72fcca58-759ab639673mr21340841b3a.4.1753148451979; Mon, 21 Jul 2025 18:40:51 -0700 (PDT) Received: from jpkobryn-fedora-PF5CFKNC.lan ([73.222.117.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-759cb15699esm6584089b3a.82.2025.07.21.18.40.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Jul 2025 18:40:51 -0700 (PDT) From: JP Kobryn To: tj@kernel.org, shakeel.butt@linux.dev, mkoutny@suse.com, yosryahmed@google.com, hannes@cmpxchg.org, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, kernel-team@meta.com Subject: [PATCH 3/5 cgroup/for-6.16-fixes] cgroup: split init_and_link_css() Date: Mon, 21 Jul 2025 18:40:28 -0700 Message-ID: <20250722014030.297537-4-inwardvessel@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250722014030.297537-1-inwardvessel@gmail.com> References: <20250722014030.297537-1-inwardvessel@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Just as its name implies, init_and_link_css() has two responsibilities. One is defining default values for some of the given css's fields. The other is defining the cgroup, parent, and subsystem relationships (linking) while incrementing the newly associated cgroup refcounts (including parent). Once the refcounts are changed, cleanup of the css has to be performed asynchronously in a series of workqueue functions. The cleanup constraint impacts the error handling of the the css_create() function. Code that follows init_and_link_css() must jump to the async cleanup path in the case of an error. This leaves the call to css_rstat_init() in a bad position. If it fails or if any other function between it and init_and_link_css() fails, the async cleanup sequence will ultimately reach a call to css_rstat_exit() on an uninitialized css. Split init_and_link_css() into separate functions for each of its two responsibilies. This allows for handling errors without having to resort to the async cleanup sequence. More specifically, css_rstat_init() could be called before async cleanup becomes necessary within css_create(). This patch serves as preparation for the change in where css_rstat_init() will be called. Signed-off-by: JP Kobryn Reported-by: syzbot+8d052e8b99e40bc625ed@syzkaller.appspotmail.com --- kernel/cgroup/cgroup.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index b034f47580f6..1990c6113c7f 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -5568,21 +5568,25 @@ static void css_release(struct percpu_ref *ref) queue_work(cgroup_destroy_wq, &css->destroy_work); } =20 -static void init_and_link_css(struct cgroup_subsys_state *css, +static void init_css(struct cgroup_subsys_state *css) +{ + memset(css, 0, sizeof(*css)); + css->id =3D -1; + INIT_LIST_HEAD(&css->sibling); + INIT_LIST_HEAD(&css->children); + css->serial_nr =3D css_serial_nr_next++; + atomic_set(&css->online_cnt, 0); +} + +static void link_css(struct cgroup_subsys_state *css, struct cgroup_subsys *ss, struct cgroup *cgrp) { lockdep_assert_held(&cgroup_mutex); =20 cgroup_get_live(cgrp); =20 - memset(css, 0, sizeof(*css)); css->cgroup =3D cgrp; css->ss =3D ss; - css->id =3D -1; - INIT_LIST_HEAD(&css->sibling); - INIT_LIST_HEAD(&css->children); - css->serial_nr =3D css_serial_nr_next++; - atomic_set(&css->online_cnt, 0); =20 if (cgroup_parent(cgrp)) { css->parent =3D cgroup_css(cgroup_parent(cgrp), ss); @@ -5670,7 +5674,8 @@ static struct cgroup_subsys_state *css_create(struct = cgroup *cgrp, if (IS_ERR(css)) return css; =20 - init_and_link_css(css, ss, cgrp); + init_css(css); + link_css(css, ss, cgrp); =20 err =3D percpu_ref_init(&css->refcnt, css_release, 0, GFP_KERNEL); if (err) @@ -6130,7 +6135,8 @@ static void __init cgroup_init_subsys(struct cgroup_s= ubsys *ss, bool early) css =3D ss->css_alloc(NULL); /* We don't handle early failures gracefully */ BUG_ON(IS_ERR(css)); - init_and_link_css(css, ss, &cgrp_dfl_root.cgrp); + init_css(css); + link_css(css, ss, &cgrp_dfl_root.cgrp); =20 /* * Root csses are never destroyed and we can't initialize --=20 2.47.1 From nobody Mon Oct 6 11:55:34 2025 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 817551AC44D; Tue, 22 Jul 2025 01:40:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148456; cv=none; b=YgmJeZziyWD++M9qTvBw78OK1o9qTO8rPbCLdD0kzY1d1DpbsZasqyLYndlcFiws7CuMZbbqtQWaOiC5YO+gh18j/ltL//WfrNr39mJbNyvSZZRe/1HptvUqSl7XvCHFtQKp8WNjFpPlfmOdbbPXdFOMC2fYv3fdedZmtyc53/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148456; c=relaxed/simple; bh=y5qrT1QbqSjri6W+4AWzLCs1sxAfsQM0FEqrd2Sfo4M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TZ3BS2XgnfIKSK5su7Uk3Hi9CQSBvQW+c4LZqFLM7mioTEPVmXl2UgzxltiepCQYaMFpU6U5o7S6dxWzvkhrh/J8CiA4ArDemq8a2Ro3xDL32cvfIQLy5+5AV4+XABH5Q20j1W6OlzsRJ7BA9fUdhjkuDvTR0Xv5BAWQ8eCxjeU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YKxXjnGc; arc=none smtp.client-ip=209.85.210.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YKxXjnGc" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-7425bd5a83aso4224994b3a.0; Mon, 21 Jul 2025 18:40:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753148454; x=1753753254; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=P29Ie3p2JSXd0sbOP8FF4LrIvKgvkS65h14Qi4nDLfA=; b=YKxXjnGc+ED+FveCkusfnQh/D4HOCkQ+yl41mw+5zhzXdO5TQPdT8Puf5rzSSVz43K EcHwpXQsN6uQ06V1q+cuuvc8Vic6EPM8cfLu7f5Ypqy1tWAlD3scCuJyBP2aK+6ROGwL QBE0+vWjHGCQFHrqfergmxOsAz1cDhBv39uNY8+WybEah0UaD9Mp1+K1Pcy9KGyO8fzs Kl4lIy/Sx8DnIQqPiZokchN9JNmTfp/6G52UKFAQFYp8m9HONUmq6jORfNfojqpp8k/l zbytal5m9rI66sU3SPSkMiokLPJzPjC4AP1Np2sgJlh+C5ul8Kh1PvAIxYieBWUvqQfv FkCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753148454; x=1753753254; h=content-transfer-encoding:mime-version: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=P29Ie3p2JSXd0sbOP8FF4LrIvKgvkS65h14Qi4nDLfA=; b=hqGjhrCPmiPagSscsIGVAWCfG02hpmBb1CQrXN0+yu6Ixtr4wuaCU0PwpDTxDD7+m8 eDeaHKjzeN8Sii4ZM2zfhzmh3kcelsljyswJRV2gIyv8GbOftWVklzvi7YaKS9ro1JFC mjPprAuc8Ura/Z/jJpy4WqGmzV7219VBkVzS28IQfN/c1ReseisxsW83M/ldkvI3IOd7 MuBxm1o2sigya5lZK9Zq/02AQHfZnKEgueuAsqwiFtSc6ew/Vec0BMut4zS4FWwxn3CG yyz+pk4A3BH6B+ZkwqrOQiYE0Lu6+fyqey+zJmM4oIS4dPux+qhm/zwQdGVdnf2qcqXY peYw== X-Forwarded-Encrypted: i=1; AJvYcCU7zz36YwfZLkiO2d9fI4Ro0Xw0rSTx+laIfKXXA8iCc0EbkPA1AOLTacJMnh8YTz2XhWUv9Xum@vger.kernel.org X-Gm-Message-State: AOJu0YzTgVF8EDNWweS9SBH82XEF5uteisGKwDtA3DFVoaPvhH+pRQ8P U2xBSYExXlBdmEg567PG6zTpj8rcco1X3QtjbEO/5LrEVI/cznq2h9uT X-Gm-Gg: ASbGncvsT3oSSZoMEn7DFWDbc0CBNlQ39ysatonPBOLi5oauEDNtJWVZi5od+Od3acw /4KJbJ4ynMuOlr0qq05i/4PbW04yyDVP7IYzJv+fmUO8Uyn+9u9M+9NbVe/VJQB6G+FB1bUjZCS zgf70bhY7xqDhmf3Sqhyor4NQkv54ZvQkaqq/E1UbtNEXIHo2hyTaGyUDgj4IDgevKRp05jmxJC JIxcK6GRmZFP7AbXo7DDYrbWmfmfJcfe061nQZydxoGQqOk/OIrfFNL679LW41gXRhixDXe70AR RvUsgmV5I5S/RcH/oUIzClL51jpL+v6bL7hdgxrd2XAOdOo+3/PycMrVkO2MwTFiBW1U6f4omds 5FGfwr4Ylzf7x5zw3HB6X0CNnBKDX6lOjSuV+EaAYe37KQsnk X-Google-Smtp-Source: AGHT+IFHHUEI9V2PzmITHq6Dn8/pHIGtkfzzuFLjolTgZaHesMWGTRlig91CXbkIwWYUeR3yK07uBA== X-Received: by 2002:a05:6a00:3392:b0:73e:10ea:b1e9 with SMTP id d2e1a72fcca58-75722869545mr28153829b3a.6.1753148453743; Mon, 21 Jul 2025 18:40:53 -0700 (PDT) Received: from jpkobryn-fedora-PF5CFKNC.lan ([73.222.117.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-759cb15699esm6584089b3a.82.2025.07.21.18.40.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Jul 2025 18:40:53 -0700 (PDT) From: JP Kobryn To: tj@kernel.org, shakeel.butt@linux.dev, mkoutny@suse.com, yosryahmed@google.com, hannes@cmpxchg.org, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, kernel-team@meta.com Subject: [PATCH 4/5 cgroup/for-6.16-fixes] cgroup: initialize css rstat before linking to cgroups in css_create() Date: Mon, 21 Jul 2025 18:40:29 -0700 Message-ID: <20250722014030.297537-5-inwardvessel@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250722014030.297537-1-inwardvessel@gmail.com> References: <20250722014030.297537-1-inwardvessel@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Calling css_rstat_init() after linking the css with its cgroup (and parent cgroup) leaves the code vulnerable to async cleanup where css_rstat_exit() is invoked on a fully initialized css. Avoid this by calling css_rstat_init() before linking. The error can then be handled inline with no async cleanup requirement. Signed-off-by: JP Kobryn Reported-by: syzbot+8d052e8b99e40bc625ed@syzkaller.appspotmail.com --- kernel/cgroup/cgroup.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 1990c6113c7f..0f8c6ce21634 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -5675,6 +5675,15 @@ static struct cgroup_subsys_state *css_create(struct= cgroup *cgrp, return css; =20 init_css(css); + + if (ss->css_rstat_flush) { + err =3D css_rstat_init(css); + if (err) { + ss->css_free(css); + goto err_out; + } + } + link_css(css, ss, cgrp); =20 err =3D percpu_ref_init(&css->refcnt, css_release, 0, GFP_KERNEL); @@ -5686,12 +5695,6 @@ static struct cgroup_subsys_state *css_create(struct= cgroup *cgrp, goto err_free_css; css->id =3D err; =20 - if (ss->css_rstat_flush) { - err =3D css_rstat_init(css); - if (err) - goto err_free_css; - } - /* @css is ready to be brought online now, make it visible */ list_add_tail_rcu(&css->sibling, &parent_css->children); cgroup_idr_replace(&ss->css_idr, css, css->id); @@ -5707,6 +5710,7 @@ static struct cgroup_subsys_state *css_create(struct = cgroup *cgrp, err_free_css: INIT_RCU_WORK(&css->destroy_rwork, css_free_rwork_fn); queue_rcu_work(cgroup_destroy_wq, &css->destroy_rwork); +err_out: return ERR_PTR(err); } =20 --=20 2.47.1 From nobody Mon Oct 6 11:55:34 2025 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45DAB1D6DB5; Tue, 22 Jul 2025 01:40:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148457; cv=none; b=E6M/vyZB/hnKbyn+RHvj5mPEWqApXUPQ9kOb4YjtSehzIAdpV6jC/LmYgMN+/JZknnvmJxfHBmirILIYG9I+m8/4Q29Q319viaDIqBtnqiarim+Z1Ed+jie73K5sZfUa4jTd/Xos+gbsvy/4p6BKEokyFIqLsGUSDxBGnfjRq2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753148457; c=relaxed/simple; bh=WfWKoVZm8XPwL8Mbv5vvFzivXuPSwIHqBgnu7JeC+gs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H4Repcmds3lz4evDpkxYUH5ICchHKZ4fpH67ltTphVww/V9O+qf//IJNVB1G9ows40ppLPrs1mzo7+Z6BWOpE1LxOoOoN7b5jtDBaZnLMJ/BaQDc7hy9VQU1Cl8aUGLEomdy70iAARJJJM7WEFUnxkg6jVJdwfF0KFOpyt7nC4Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fypZouky; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fypZouky" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-7490702fc7cso3095137b3a.1; Mon, 21 Jul 2025 18:40:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753148455; x=1753753255; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=guAQVHgNFsnXVgjuX+YcMM52ay1Yzole51FqU6vTCMo=; b=fypZoukyGsGjrMmlpOiKpIyDekcP+99M2/jj7M7waiz9/X7EEcBHRIzOs+2S9f+iFg 17MBJIiArHF7AkOrqWmc4vDIEkb+VoLFToGYeYEhcgaWexbSPsKoKS4M+MIGqE0Y1gnt yuEGz5UZHoINteutk7+Bu9iSdPFiYsYwc1lUBLDIMDf2Srd8yaGGwBb/QPk3x4WBtAme +eSiIxk7UR0a3chacWmM15KH3zjWDKc7/M+pW0BXmagsx5iKj+oSfOjzNMM/yzPM5o6v W4fvKyDB+ykcxWeFKh5K3dI0N02ouSMScCkt/u4EiuHUgHkSIBVdrT2GSP+vLm3r/p8v Vx8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753148455; x=1753753255; h=content-transfer-encoding:mime-version: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=guAQVHgNFsnXVgjuX+YcMM52ay1Yzole51FqU6vTCMo=; b=Zmq9jbWoNh7+W1b5QK6tUN9VOEgPcv0whLHVWikTJD7JPlY+hpSpHOIvHbJ2QL7/Pf DXL228Eqm212pghF3rvpFjql81mCNOVj4JiF5M51IMvJC2AgZKBu/LIjh+krfoS+JqVZ XbrXk3Sn2iIVGZTj3IcpjaTlcvLdCYjjJw2hXUTLCBY/JYp+RUqkdnHXaTEmdh/rc5sx bS/MfC05JdcphDJmeupmgsM2sZ96cub4rtDEjLtXzFqa4Aj6VEZkomhj9nYz0RQBk0L4 deHUg0T7Q/bNfq5YsZH4wRI0RL88X4cBur+jZxDXxJ4mw+moXB6cJdmIYC7x59zeVAz9 zq2g== X-Forwarded-Encrypted: i=1; AJvYcCVaNGtQ3TCbQ7jh6qIIY/sLvKy92kgZiv1oot7wLk1jiT7O9P+DkzUBH7vpsmQpIhbdyKVFkadH@vger.kernel.org X-Gm-Message-State: AOJu0YyBGEP3p0sijQdxc0Cz0LVgBurMpvzd+kX0n/YCMT+Rtfr8LXUe fbf9lRtm8p7izbcUBCYEeZi9M4P/XY7t2IiS/fNeuobBrXMJFyZkBLeh X-Gm-Gg: ASbGncvaW8j7VN3NMGVAlF9dKe8i2VscdeW3XhN8nIwnlBrz+r8SaT/yBemCQLSJ3JD geXzql6gCJ8seKo99d+EqD8J1cdsqPYCJW5yQmepsamoR9DcL2v5oGseD5RDJNhfG3PQr1D6VVw 81+Gp3ECVtWqshIb65Q79qoxr+Nl7/m1MJ99QqIijeucqTEAuKvp72e+XcDPjAeH8fyrm2SFrS4 BxbR1sGw3n/VaVML1PPhYGKOtJW45XB46+uAmqyc+kD0NW6WIlAF32YcWFkZYFGTEb0eF0VgZif C20Bzytz3D/XNAxMsc+nqkv9Hulfcvxp7RcsKLkyZZ1+Zz5mBaKI0M5mNNfwOEv2Kw7YDR31ym7 vpMKwpyopG9w06NL2vijtVAkdYPlEhPxqQPtpejHitlTkGQyMmOHQqj5fxgg= X-Google-Smtp-Source: AGHT+IE2VBTMdvtyEwgX+a0IEZtG4zffgz92TQCPj5wSen6lHXTE+sEYHZdNpPxoF9bMCZyg3CDdww== X-Received: by 2002:a05:6a00:1410:b0:748:f41d:69d2 with SMTP id d2e1a72fcca58-756e7acfa48mr33653521b3a.4.1753148455463; Mon, 21 Jul 2025 18:40:55 -0700 (PDT) Received: from jpkobryn-fedora-PF5CFKNC.lan ([73.222.117.172]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-759cb15699esm6584089b3a.82.2025.07.21.18.40.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Jul 2025 18:40:54 -0700 (PDT) From: JP Kobryn To: tj@kernel.org, shakeel.butt@linux.dev, mkoutny@suse.com, yosryahmed@google.com, hannes@cmpxchg.org, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, kernel-team@meta.com Subject: [PATCH 5/5 cgroup/for-6.16-fixes] cgroup: break up the internal rstat init/exit logic by subsys and base Date: Mon, 21 Jul 2025 18:40:30 -0700 Message-ID: <20250722014030.297537-6-inwardvessel@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250722014030.297537-1-inwardvessel@gmail.com> References: <20250722014030.297537-1-inwardvessel@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The __css_rstat_{base_,}init/exit() functions have complexity in how they distinguish between base stats and formal subsystem stats. Eliminate this complexity by breaking up these functions and moving the logic for base and subsystem directly into their respective public API functions. Signed-off-by: JP Kobryn Reported-by: syzbot+8d052e8b99e40bc625ed@syzkaller.appspotmail.com --- kernel/cgroup/rstat.c | 72 ++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/kernel/cgroup/rstat.c b/kernel/cgroup/rstat.c index ba656a53136a..30fdf92a21a4 100644 --- a/kernel/cgroup/rstat.c +++ b/kernel/cgroup/rstat.c @@ -437,29 +437,15 @@ __bpf_kfunc void css_rstat_flush(struct cgroup_subsys= _state *css) } } =20 -static int __css_rstat_init(struct cgroup_subsys_state *css, bool is_self) +int css_rstat_init(struct cgroup_subsys_state *css) { - struct cgroup *cgrp =3D css->cgroup; int cpu; =20 - if (is_self) { - /* the root cgrp has rstat_base_cpu preallocated */ - if (!cgrp->rstat_base_cpu) { - cgrp->rstat_base_cpu =3D alloc_percpu(struct cgroup_rstat_base_cpu); - if (!cgrp->rstat_base_cpu) - return -ENOMEM; - } - } - /* the root cgrp's self css has rstat_cpu preallocated */ if (!css->rstat_cpu) { css->rstat_cpu =3D alloc_percpu(struct css_rstat_cpu); - if (!css->rstat_cpu) { - if (is_self) - free_percpu(cgrp->rstat_base_cpu); - + if (!css->rstat_cpu) return -ENOMEM; - } } =20 /* ->updated_children list is self terminated */ @@ -467,19 +453,12 @@ static int __css_rstat_init(struct cgroup_subsys_stat= e *css, bool is_self) struct css_rstat_cpu *rstatc =3D css_rstat_cpu(css, cpu); =20 rstatc->updated_children =3D css; - - if (is_self) { - struct cgroup_rstat_base_cpu *rstatbc; - - rstatbc =3D cgroup_rstat_base_cpu(cgrp, cpu); - u64_stats_init(&rstatbc->bsync); - } } =20 return 0; } =20 -static void __css_rstat_exit(struct cgroup_subsys_state *css, bool is_self) +void css_rstat_exit(struct cgroup_subsys_state *css) { int cpu; =20 @@ -494,35 +473,44 @@ static void __css_rstat_exit(struct cgroup_subsys_sta= te *css, bool is_self) return; } =20 - if (is_self) { - struct cgroup *cgrp =3D css->cgroup; - - free_percpu(cgrp->rstat_base_cpu); - cgrp->rstat_base_cpu =3D NULL; - } - free_percpu(css->rstat_cpu); css->rstat_cpu =3D NULL; } =20 -int css_rstat_init(struct cgroup_subsys_state *css) +int cgroup_rstat_base_init(struct cgroup *cgrp) { - return __css_rstat_init(css, false); -} + int ret, cpu; =20 -void css_rstat_exit(struct cgroup_subsys_state *css) -{ - return __css_rstat_exit(css, false); -} + /* the root cgrp has rstat_base_cpu preallocated */ + if (!cgrp->rstat_base_cpu) { + cgrp->rstat_base_cpu =3D alloc_percpu(struct cgroup_rstat_base_cpu); + if (!cgrp->rstat_base_cpu) + return -ENOMEM; + } =20 -int cgroup_rstat_base_init(struct cgroup *cgrp) -{ - return __css_rstat_init(&cgrp->self, true); + ret =3D css_rstat_init(&cgrp->self); + if (ret) { + free_percpu(cgrp->rstat_base_cpu); + return ret; + } + + /* ->updated_children list is self terminated */ + for_each_possible_cpu(cpu) { + struct cgroup_rstat_base_cpu *rstatbc; + + rstatbc =3D cgroup_rstat_base_cpu(cgrp, cpu); + u64_stats_init(&rstatbc->bsync); + } + + return ret; } =20 void cgroup_rstat_base_exit(struct cgroup *cgrp) { - __css_rstat_exit(&cgrp->self, true); + css_rstat_exit(&cgrp->self); + + free_percpu(cgrp->rstat_base_cpu); + cgrp->rstat_base_cpu =3D NULL; } =20 /** --=20 2.47.1