From nobody Wed Sep 30 12:12:45 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022101.outbound.protection.outlook.com [52.101.96.101]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9A7ED313E00 for ; Sat, 8 Aug 2026 23:55:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.101 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786233337; cv=fail; b=Xi7DbB2Y2xT6qRfVazUbdAPESiWJBedCUf8L+hdEMx434kyU4N33felKTwvbHLgCOwB/NC0+nl3z6/5ejSHQBCvdKjSDYSZ7yVx89ZsE+7/XkmydT/9Aund47KEainljbm5X5RYDIhrtzT3jnnilc3850A8ACC5YoWWHZkweqn8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786233337; c=relaxed/simple; bh=swRETAEQgjYgJ9Urc76zGstOBNMYKUlREmrTAuNyt08=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Paxk/zTbOSf7oqziM7lXKJfLVBofNvOt+Jwg51NSpe6QB/IkHqxWwMCzIJMcnAQ513L0NUq2ZLBIIGjqumL3jRn4r+c6iJ9axnEfNxFOqRXp7cVDyEvLHAiLcPOPc70JMl2wT1j7vIh+34+ZY5qLXyGeA8GH2pqf37y8PsEF+rE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.101 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fnEhlt+/X14EILcHQpe0OKacTyRk47nnwofBgOUVPDv/jGrjAU207qaMi4xNPZJcz1qUwADh3UoL0fBQrJHbRcAAt5Fi79O763KvUvAfunDYzsQRDFuS/Pe4L/lbtj3AnVCR/alN1E4y8YmpKpFmIbVez6PCfk5xjAr+/NoWjzTgvEMbzqzdVuYnnLDNphds44nlwh+QJS+So7SZG6tzOPWe6YElce4JtIwtzzOPepqIyk1KSfa45XNKBFgxZwv+ujNmboURHzy/qBRY6G0xmB5EwTlBGMdcH+vuLdpBixNpd0wYvBgecW0Ak+p89nG4xam28TIsu4psNeNfMv9SvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=T3QgEa3Uk2wDagWPWsvzm8l26iiroGN5CKe5EQPwnrg=; b=PfLuX+jt8onqril0Ako0YSO2/ysyX6HCkvxToakWTTJxXyEZWVwqSIdSAKTf8hONOgUs5aUMkhBmkzaR/jlaAB7GnnXBV0j56rsWnNCsLCeJJZoIWUj/18na7ybRWoNrH84leiwDqVlYticjOQevIAm/2u6pZOO8ORHA2c3rLUMMqciIeOdcgoDTWHXuUlWa6s7t+IdU4jj9uMX2nLnHHdjz1zbhycYuC9HIULbwTOZEaG9aFE/phizWDegPsFcdghOyavq44dl/W9vfqUrineHgH9d1KfYxP/WlhXhj6wkHVn2KauQMsR5vVqsUiG1ckGlPIPEvmLJJIzhYfx8nKg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by CW1P123MB8837.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:274::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Sat, 8 Aug 2026 23:55:30 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0292.024; Sat, 8 Aug 2026 23:55:30 +0000 From: Aaron Tomlin To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org Cc: dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, kprateek.nayak@amd.com, zhanxusheng1024@gmail.com, neelx@suse.com, chjohnst@mail.com, mproche@mail.com, sean@ashe.io, steve@abita.co, linux-kernel@vger.kernel.org Subject: [PATCH v3 1/4] sched/debug: Protect lockless rq->curr access in print_cpu() Date: Sat, 8 Aug 2026 19:55:19 -0400 Message-ID: <20260808235522.380038-2-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260808235522.380038-1-atomlin@atomlin.com> References: <20260808235522.380038-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9P220CA0020.NAMP220.PROD.OUTLOOK.COM (2603:10b6:408:13e::25) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|CW1P123MB8837:EE_ X-MS-Office365-Filtering-Correlation-Id: c40fa6d0-e8ca-4a90-7c29-08def5a88722 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|23010399003|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: HIr38X7mfrlO2ub4JmWcZg6ydkg96/CwkEzTT4zFj4MyHg/+0+enrdkGE2y+x0jT4VjINFP9ZrPhD9DZuOX6XUpvNcPznmGFaIssHMNxjCa8MIKYfzmKVPLYX64NjPB9b1VTHfA4S6ZRTkAQXKQ+64zWq8sXCBkO+nnnPQo3sDYX5R60dpRcOPXRALGSFbqkTaLyZNPlOM4+/9HVP1vPGWatcAhKOjhR84UZYndcH+9WzEoabKAbOgMepBKpIs7OHfydwNXLBP4cxDx7eabTkgNULXge/Pn9XzKGpFsckKQMZT11+c0MRWQVc2IhUbRvd023T/C5DaD5Aeg1n25mrif+5BghPZ2sPkDkrhZBtIeTtj5mQSc80BSMYJRcIZR5NE0FNFfVe7XgStRXcRv+EQmIB8Wf1gJiejSqMG0BecFJLtYnTcV8DExBLQsxbLE03wyZrx5ekLZK16YMLpIVaK1tcYex5optlhAr0vOU0Az+QST6XeDs5t468GMy4C8Xg1cuZCJOR0CtDkvi8kVFMxCAYnrHq3e6bvD5GA7rU/aPFagN6FjJ0XO7DvVOMfkaezASGqd+ojaEs21ZjrPYuReE1ul4HN42HnLOjCqziAO9CbSyniBk9oNesSbjBblOsWom1UFBirs76xrMi1yPzdvefaWIrucuvGWHJ4clz1w= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(23010399003)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QrkqCwkEmETtATYq0UegKx9q47tvHtDkuVX5E51gwPtWOVQVigcusOpmu3ak?= =?us-ascii?Q?N2vxvrsepqHuYM1/rmFzyrqk6/tssJF41C1SeTmO9q+WDWRoE8jWhgnZULDE?= =?us-ascii?Q?so6Ow6sM1Wq0J239zEXLlkT9PM3wKepdfLEFAhfsW+cSVnlTkmDkUeZPe6OC?= =?us-ascii?Q?OfdjAq9pcjiW65FG9BR/I31zoaYubVQRJvES1UiwNeUinU/3aO50nwIhtZyt?= =?us-ascii?Q?PaaRfblbNoJ1KnvrDieXpMb1kFYHhXaUDVjih9bJ53OF6PZjdu2wg/Sbn/Z2?= =?us-ascii?Q?8ZiTh/cUWOIo/Hz4IHiujKOOFSVrY1OBc7+0hDoaskniGdkyK1N3SdlCQ/3L?= =?us-ascii?Q?XVWthg1wifqOc1mZLey/gq38utXS+SNxyFIdfO0RBwQdYWG/i7cTgPlAT06I?= =?us-ascii?Q?F9apeVvrrKz8VVFf2C3IiPasBtb4K5KA8KyHPnpB1/MddmFAOhaBaRjjj5/R?= =?us-ascii?Q?GPsaScmMndwG8KAl5lbHqUlKZN8aFuhbZfsSWkdEmautZV0AppMij9qXVBnT?= =?us-ascii?Q?oNrmrRHzL8cdDN7zAZCygIDr7hqxnQajutyrUxNgrU+Es83grKCBeb/cfdVt?= =?us-ascii?Q?i0q2KY4CT6NW+GyN4neNgCsa7X89bWwgCDyTP3fv4VQND3bRk2P65xy2ScpU?= =?us-ascii?Q?0dGVxrC6E/R2iXeNsWsXZ1JDXZ+NM6YoyoS0n8hy9lV671pIPj5vOdsy2O4g?= =?us-ascii?Q?szC8me5/fEZl4fLsyCikmxMUl9k72yYK9BxkVic/CChPrXTrzMWHsG4X4v2c?= =?us-ascii?Q?TDQBUuKAQbKw+3nybqEaWKpn/WtVwmdIC5K3bmAuMv9yfXmhYZaqdUNJzrJ0?= =?us-ascii?Q?KBF29yGvFzs+0vcINOFc+ME4H48meYhZr3Z8+Pq5O2F0WPwtUw9f0dtJmUnt?= =?us-ascii?Q?RYgDHFrYNp0kCBxsx4767zpACmzyG2chTZD3yJ7r4NnHl6j5/RxRqQnoLjSg?= =?us-ascii?Q?sQYJV6r8TYhsfbVIVVtM+IO51I8d/gKB9sCIj7nltLm5Nj5/rPZkdf5ImLel?= =?us-ascii?Q?9/CcNeTXJAo5aULijJN5cjxSeJulWV3xNYwVN19vY5/80vniyq430rwgkePm?= =?us-ascii?Q?n40kcc+m1zjo7bcGvXTKVq28aa/EXVVd3s5014CZOXyZXsvgF27odhnLzZPx?= =?us-ascii?Q?usqJsEpyj57A58YWfOzWMsBFcKsMlrS2DR2yYcVYy4ByrCJQRGIvGQdJZ5AN?= =?us-ascii?Q?SRKyY71zQAm7qge9kz3uHmr3CSFuSOq8Oexu5FglVXSuQf5zC9QKYyqU8xF3?= =?us-ascii?Q?auMUINAFiqriRj36Pn4TaSK9WboRr3DJ7fQYdSkNo5equcgkwQpqQOLLPFGh?= =?us-ascii?Q?7GeWQEHije/WwBFC0Al+PRNLoQXHEFOaFdABPx2tnJQe+Tt/dO3SCd5bbpXv?= =?us-ascii?Q?Qf0+edzNnJQmUvfMVvur2+e9qRPwzRZx/eXyzfiMAeGKQ2PBW7vcg/9BHAdY?= =?us-ascii?Q?MU6pFLfzt5SUPNz4fNGY6Kn1EKmCdGp7iaAduGcdlVo973GT99fl25I2eMM6?= =?us-ascii?Q?ucCTIzYfmuUF+j6R11vYt+LGuIetY3pu34Ps6mTz4gU55KTQySIzqmjnrC3k?= =?us-ascii?Q?l5hj2rlaskZdB7O6ZoaLyPlynylaO2HYAy+gUgqOyyXOe0j9yzD0Az/tWx+t?= =?us-ascii?Q?iRUulK3LzTYRu46cafTbYX6f9dthRgiOh41aARhWqdIp0ldQTxrcZMajf2S9?= =?us-ascii?Q?2vMJMms17+aYHNpglLEzvC5aKZAMMwz2XchVDN1+4n/RcMXySdWB2VEc0auk?= =?us-ascii?Q?xszM9O6nvg=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: c40fa6d0-e8ca-4a90-7c29-08def5a88722 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2026 23:55:30.4669 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CpL0dHUoaW8bZcPQdPDSHJJfnixunaZMjAUeJyQmQXS5F7YgtGch9WHxPak1Nkm11Fwc2T4Z3+ZAnH4hZXBu0w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CW1P123MB8837 Content-Type: text/plain; charset="utf-8" In print_cpu(), rq->curr is dereferenced locklessly to print the current task's PID via task_pid_nr(rq->curr). While accessing /sys/kernel/debug/sched/debug is inherently best-effort only; rq->curr is indeed expected to change dynamically while print_cpu() is executing. However, if the task currently running on the CPU exits concurrently and its reference count drops to zero, put_task_struct() calls call_rcu() to schedule __put_task_struct_rcu_cb(). Because print_cpu() does not hold the RCU read lock while dereferencing rq->curr, an RCU grace period can complete concurrently and free the task structure via free_task(), creating a potential use-after-free race condition. Resolve this by reading rq->curr using READ_ONCE() inside an RCU read-side critical section. Holding the RCU read lock delays the invocation of __put_task_struct_rcu_cb() until after rcu_read_unlock(), ensuring that the struct task_struct memory remains valid while being accessed. Fixes: 02968ccf7b80 ("sched: add /proc/sched_debug file") Reported-by: sashiko-bot Signed-off-by: Aaron Tomlin --- kernel/sched/debug.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 40584b27ea0c..78fc02d71710 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -1126,7 +1126,10 @@ do { \ P(nr_switches); P(nr_uninterruptible); PN(next_balance); - SEQ_printf(m, " .%-30s: %ld\n", "curr->pid", (long)(task_pid_nr(rq->curr= ))); + rcu_read_lock(); + SEQ_printf(m, " .%-30s: %ld\n", "curr->pid", + (long)(task_pid_nr(READ_ONCE(rq->curr)))); + rcu_read_unlock(); PN(clock); PN(clock_task); #undef P --=20 2.55.0 From nobody Wed Sep 30 12:12:45 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022101.outbound.protection.outlook.com [52.101.96.101]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 47C04383C6B for ; Sat, 8 Aug 2026 23:55:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.101 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786233338; cv=fail; b=VaqKPG85egGpgq4P5eJuCJxLjYZONIQL98eRZ4MogO8nK5cCsdzdXSG1BsQ5hri3Qtwzvys+RynDC9GlMnDdsxh6KsWwyXJnnllBM8Pn7Y4J7VsBVV4IoDYx9IDu3rlylwjhdRhanRRH9BdSzJ/wFdp7ifqJDpISMTHIBKHqD60= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786233338; c=relaxed/simple; bh=Dajg1fb0VQIqNJLF0XeQoIG2qCnx/O2WyTKKwgoLlZE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pMjQ7BH3stZhoeVwBviQZxSHrUrO91FH8smZWrXvvr7ScFRwGsPttJzFbI1RkHcls+V58q4GNayuC61hQ6ZOutsFTxL23ZNlv//6W8cWnaxUGU+jzv2Gg66lyh//WEFtncTb6cAQa6r7mdZPXh/gcWPLDN15PH9bRZhYXGOSsk0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.101 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rmqFjzo9DHVxGGq1tkMC5ZTf9VsnoPVGzWnSrfUM4lukZk9aBRm7xiDY6/sKp7SfFvkQC8Q2giqtE3LsE6pFiMxiyz5X8wqiycFtByfTYAv9gM4lYHt/G9bggcTPMsyNqt/13TTnMNX99IQjiS8BxFb9ewEKBhumxEYcxQkmTBWVB+MJY6tY9RQ5oUwh6HZ8dJLmtnJP88dIHt5GiyawGO0ba52CU0m+KYHB6ItLgyTlBh43duL0qOJSV0vzzKug4I4iHb53+yGJZxBLQf6D6mcJ+t6D95LlrwhbenOJjDxe8lxe91CCB9Pm4CYl0ngEHtHIe5YwdVl1NBOO83Ojeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=BkYfCHGgmVGpIMlFVN3P7y0eWfzERl5SXFz5j958PSQ=; b=mMDmw1u7dN3tspwXND2G14JSrkHPXZ0uPECLYkbqk8oKZCHcGQ9AnG0NX41mB7YgS+m4uvWY9GXYpk8lDWOv00QYtytS7XwLP4BgYNE5sO77vaFaYMUYrdMBijsj76smAfBbHZwzg7/AGZJaxhgd6Q4QPY160tPZCf2whZoNj793EZvmmAxTPmKV/RimhEWhvSDvCv9OsQPujaKjyGpR5mSmzeAJO4guP9X12/EPPWX4vPkW++NSks3DqaxjAV0Ts82naHF8UE3ugSitteRsaghzgFL0unOlqkgYyiFRBroMm9MFn0dnfQg2PdFGR0m0T5yEu1gn3oJ2qzSJ5sOGmg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by CW1P123MB8837.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:274::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Sat, 8 Aug 2026 23:55:34 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0292.024; Sat, 8 Aug 2026 23:55:34 +0000 From: Aaron Tomlin To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org Cc: dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, kprateek.nayak@amd.com, zhanxusheng1024@gmail.com, neelx@suse.com, chjohnst@mail.com, mproche@mail.com, sean@ashe.io, steve@abita.co, linux-kernel@vger.kernel.org Subject: [PATCH v3 2/4] sched/debug: Protect lockless rq->rd access in print_dl_rq() Date: Sat, 8 Aug 2026 19:55:20 -0400 Message-ID: <20260808235522.380038-3-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260808235522.380038-1-atomlin@atomlin.com> References: <20260808235522.380038-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0544.namprd03.prod.outlook.com (2603:10b6:408:138::9) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|CW1P123MB8837:EE_ X-MS-Office365-Filtering-Correlation-Id: 73330726-48dc-4abb-5a86-08def5a88975 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|23010399003|6133799003|10067099003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: i8Q7P4UJLE0C4vNif6iclLZjKfWj9hQ/tJ98Ef13p1pwhzErw/YC1zVXa+VxlP7Ed/VsWM0d/E6GONaoSuNrB0T0JWyXbEaKeH2UMsOnF/RFmEwuWd+4pBkjSOvFyyLx+hLunycF1DV1DU09AkpntKHGmQEcxswiwRRxoYHlFbWx7uqL/JyQj7Jl3aIyOi2rtuzGxhFEqCgPq03dj/q6oybyb8JBC4NjkkZ+pBmjFclB5YBLh7/9AsnHeBKBMd7Uk5cFqzcteV8pt+ascNiXf3MyoCLv/ddVSj2iXVt7O2aVgm6V2nla0MRhQFvjX8wb7BSE3Uste0unlJEyDj93y49u1z9Uf3q4lnJAk4Mv24UPc+dge5k75GKBVTBmj/hodBhaL+Hb4bolLC6Z80CqGQoQc4xN2U131aJ42Ywxz392OlLEUuH/V//sBGm1onjXz9G54vXLCOxGGRUBcyVGx1VyVWG1EkCoPX/Wyb7KD2MRfJFg97kgQmQcpBZ37SmX8aULBh75ojLKj4yaz2KwJZEN2eEwiSn7O/Ezasi+Y7OUDWZaickO0pY30oUX40wdGgfxI15xlHgJHXwStgs15QlVt6Gkul5AVZtkZehetFMKDDmkiZB3ZLQKUv/Hpvj/vaS0xO+hnrau4jt9hbOCmHkgUfGF0LliXtsIIwB6olo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(23010399003)(6133799003)(10067099003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2tyTxAVxMaDNZ02/w4fsEQFCwGVIOYx6c+Kx23BAes9O8m4yp/G8RJqyKJfC?= =?us-ascii?Q?rDCp685rNnUsd70Kc8FUYcnnjGtXdLxgk4EgpvNQoNP6G6tvPRUu7TDRoK8M?= =?us-ascii?Q?ebgKkDlK+g/BrQHeLA1XFXnoIzSFI4SAHPWg/VV4CrWz2Xp6GazoXK9Ojc0I?= =?us-ascii?Q?M8utejuIBaWxkZYhD4fjPlU5SyiH2v49Dl58cZidfkGzzNeDJsA+OsURG9Lc?= =?us-ascii?Q?ioY0HrLYkRxQpJ4+jd0a8uvY2JQm6qRaS5GVJI6fSZ6H9ElCsEKSl1YhbIBf?= =?us-ascii?Q?alASzeQfezmaECO4+Pui1R+nxfiaRhFlisGqBr2LlGCoBfjOHL3KhC1KuP2M?= =?us-ascii?Q?ghv7KDGFTMAlY2CBAM+qXlUI6iLfInau/Y7nPfCKcKHJSXQ2Isw9rzENjEXI?= =?us-ascii?Q?5yWPNM7pS4Zt4qRN1CDW+F8YoVFQwmvnxelKXUsxWr8b/RPuBK3Anehcf/uj?= =?us-ascii?Q?rVgmcfFgqpdlXpMWmYEepqswoeyam8zjUUgW12t1pcfefcLQ34hMy2VmBlYt?= =?us-ascii?Q?SXAJpSzFDecwSRQm9tVFRdqWj6aivOsEMX7oL1b+IwsDj9JCLz8WjBHY0nnZ?= =?us-ascii?Q?EFirfMcbkA/nVTH9koWp2/pMvfmiT7v8ltF6Sw/kelrciUGz/xW6HR/Q/7Z5?= =?us-ascii?Q?VD6aejUh12t5fkC0sW+xUnNoljHdYM1uOMUx201Qzit97PDKwBnY2syoW43d?= =?us-ascii?Q?koaAvuvp5r7XF0crAS5Hyfo+ClbnkvFQHDgOGiMkY2tQ23UlMS+FJHR3+oPl?= =?us-ascii?Q?y54CeqcDY8NESglLD7UJ9b5PzbjpoTsIqgEcEOV/ubZZk1uhjqESzOzartzK?= =?us-ascii?Q?f+By/0FpN2LSI0a/2fwmB/fYVtrXaFPdIZdd+myNM7cVmAqy5oDIatjbiw4k?= =?us-ascii?Q?xv7DgL4qwjXQC+I4ojq1rabVMFMDsYLe2aJCBBnW2h0cLnVoIlNCdr/pbHT+?= =?us-ascii?Q?y0lqg/SEFtDAYRz4sABlBZ+ku2OSfsbXRHSiBun1v7cUOI/DCSI7Ww0/cgHi?= =?us-ascii?Q?sViFg1TthksPN/xLePA+FC4PSQqO9EU+dBxc7qeWlTlKZB9D7H1anJdqllsG?= =?us-ascii?Q?gbC2mtxSa9zgMFzMr4qrxA0ta3dAlMt3vS4Jr7L2EvVzlLo+yWymg74QkSh/?= =?us-ascii?Q?yj1CJGJUtZzhFFiWSW2Kv6JMfZvpZyl38cPnUwHNB2RpXkeZ6FPxQLapAJ4B?= =?us-ascii?Q?jSpecuyFFdKc1X5vs3A2VNqVCDAzj1YIPs1mcMmQspuqLUaVUJuaT+EXOin/?= =?us-ascii?Q?MwaV5XdkoDGVrGAr9iuc5VBPKfoYjULFcd9ofUoEysFdhcFXb6351yAbQjxH?= =?us-ascii?Q?XL8rLnp/3YwN+ZWbC4yZF31kzsrqsBW8fatOfK1zB78QImOzwv/pMNSrqOlo?= =?us-ascii?Q?PCG6AfOuDFQuI5Fr/dhxEJdcsBe6stmjxR02ILQQ5x/TEA7BNBepUi+1TPXZ?= =?us-ascii?Q?xsK5n3rXdM/Ne47UZO/R4vSloj0jkr/5i4zq/hnB2kKG/sAbCj9ZP6aEccex?= =?us-ascii?Q?1QKv49JfTkuYTofFRyn8k0Rk6NxTDCPmARwxw14SRfxqudy4lNFAyPjlEM1f?= =?us-ascii?Q?CMEnJEktMAUxGpDjWHryfVs+OJGb4XAZvDxXdsotSYOdKH3i3MoCpU20UZAC?= =?us-ascii?Q?EhHsX7oxLcUveCeCf74q/K6bGEu8MZK+L+3CLKJp+XV9dCtGygdqisXeLhlV?= =?us-ascii?Q?guA5grgOOiaza0j3F8ITYEK/Mau1LtOtG7mua2QC7puICyvIDxkPEyXFQm4G?= =?us-ascii?Q?63CNOl09Ow=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73330726-48dc-4abb-5a86-08def5a88975 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2026 23:55:34.3846 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kIzecSi+A9jCqT7hvLJJ0M+ZGf+skfwrgC5ZyQmV3oMYB5ko8JpkbmtGwN06Fw6Th6le19yuS3BfdnvX8LKZEA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CW1P123MB8837 Content-Type: text/plain; charset="utf-8" In print_dl_rq(), cpu_rq(cpu)->rd is dereferenced locklessly to display deadline bandwidth statistics. During CPU hot-unplug or cgroup cpuset repartitioning events, partition_sched_domains() calls cpu_attach_domain(), which executes rq_attach_root() to detach the CPU from its root_domain. When the reference count of the detached root_domain drops to zero, rq_attach_root() calls call_rcu(&old_rd->rcu, free_rootdomain) to schedule memory teardown after an RCU grace period. Because print_dl_rq() does not hold an RCU read lock while dereferencing cpu_rq(cpu)->rd, an RCU grace period can elapse concurrently while debugfs is reading the file. This allows free_rootdomain() to execute kfree(old_rd), introducing a use-after-free race condition when print_dl_rq() reads dl_bw->bw. Fix this by fetching rq->rd using READ_ONCE() inside an RCU read-side critical section. Holding the RCU read lock guarantees that the struct root_domain memory remains valid while being accessed. Fixes: 02968ccf7b80 ("sched: add /proc/sched_debug file") Reported-by: sashiko-bot Signed-off-by: Aaron Tomlin --- kernel/sched/debug.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 78fc02d71710..e9d40a660346 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -1081,6 +1081,7 @@ void print_rt_rq(struct seq_file *m, int cpu, struct = rt_rq *rt_rq) void print_dl_rq(struct seq_file *m, int cpu, struct dl_rq *dl_rq) { struct dl_bw *dl_bw; + struct root_domain *rd; =20 SEQ_printf(m, "\n"); SEQ_printf(m, "dl_rq[%d]:\n", cpu); @@ -1089,9 +1090,14 @@ void print_dl_rq(struct seq_file *m, int cpu, struct= dl_rq *dl_rq) SEQ_printf(m, " .%-30s: %lu\n", #x, (unsigned long)(dl_rq->x)) =20 PU(dl_nr_running); - dl_bw =3D &cpu_rq(cpu)->rd->dl_bw; - SEQ_printf(m, " .%-30s: %lld\n", "dl_bw->bw", dl_bw->bw); - SEQ_printf(m, " .%-30s: %lld\n", "dl_bw->total_bw", dl_bw->total_bw); + rcu_read_lock(); + rd =3D READ_ONCE(cpu_rq(cpu)->rd); + if (rd) { + dl_bw =3D &rd->dl_bw; + SEQ_printf(m, " .%-30s: %lld\n", "dl_bw->bw", dl_bw->bw); + SEQ_printf(m, " .%-30s: %lld\n", "dl_bw->total_bw", dl_bw->total_bw); + } + rcu_read_unlock(); =20 #undef PU } --=20 2.55.0 From nobody Wed Sep 30 12:12:45 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022101.outbound.protection.outlook.com [52.101.96.101]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F252C3812E9 for ; Sat, 8 Aug 2026 23:55:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.101 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786233344; cv=fail; b=o7TjwdEeyApBMGv9AuXQdogG7ahs91Am0MVUt+4Ks/Hf/4KLUjJhoDur7qsrLc2VrGhxvcVfsYTL6QfZC3LMy+Azgn60RU4mForGsBCzB+i8mGSKLj57QCt902GiUzVxKULS2u7xxDgWsPpDfHDVKjZ6//z39OjW00EiFXSGD9Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786233344; c=relaxed/simple; bh=R8XpHP0BEHfCd6cr/D0/q2OQnUTbexeEL863itpAuM8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dKp+icpFr2hG6tCYk7fBbHLMvvm1OtwCU6Bg3QU33xfglZZhMFTv57XWup5UVkRiMUzwBwi3tigAngZpGjXsL2uz45YYZAM0/mtYOaMenLxEvZsV73K/sNIbwp+FzeZp+wHmL28cKJyFal9H1/pMAgBM+eYiHT3xcAuYLu9vHXI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.101 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OlWFgHztx6DiaJ89Pxzt4iTFs1wj3CuZnEYCdwayprdgaSdrCtVZuV1JG8LDWYVonYefQ/qPA6YIIZ5KD/JFvzmKvfU7ABb8VHbZ7TREo5gQemigp5k3MHqE3znn8JcrkLr0oL6hc45onf65X1uNok1ZSvUje6mwQD5Lwk7S7U0xgaMxlTemp1bfrKBJLX9y7/7MEWGjHTge03TkB5TwWosGwOIIz+KKBOzwTnMrV+Qfl1iP6cDzZZI6rq3opBd80Pp9cDlS4t9SbN5jJpa5lPGcRNgtR7lGc+xEGUBYTTzxYIW0kpunsozkgOpQa8kW4jAt1Sz3n7tSUHxPCpHftw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=HQYhVylvDYjLsFP2kpLVR0AAuJBxMVAAsW//INzUk3o=; b=vHqaSvZR6ohe+q8BySrLUIjlh/z7ws2NjpVYadXGfiM9TTS0fTTr5o6Led1eraAbS4SXJ2/TNZBgaViqGYSQstDukQcT0graApQgru5aNPHZjHlIjEKqL3843YaYo3Zwzm75DVXZmh7W/fqRf22gbs9OEJUlp/qxqiLFcieZzDrTP3S0sCplUdiPf1/6Bb8nydytD0q8/xqbkk/v5dtKnyCNJBLL+2bemB0B0m0bBXlvqVsyhL2LhEfa5A565UO5v8httWF5QiZDj2JUKM2mX0e/8hLcg4rjWyDyXQcJyfhB+bbDZFQCauTK0gjP/A4cr1zeiOvk2n6kyRuNzIzMkQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by CW1P123MB8837.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:274::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Sat, 8 Aug 2026 23:55:38 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0292.024; Sat, 8 Aug 2026 23:55:38 +0000 From: Aaron Tomlin To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org Cc: dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, kprateek.nayak@amd.com, zhanxusheng1024@gmail.com, neelx@suse.com, chjohnst@mail.com, mproche@mail.com, sean@ashe.io, steve@abita.co, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/4] sched/fair: Use list_for_each_entry_rcu() in print_cfs_stats() Date: Sat, 8 Aug 2026 19:55:21 -0400 Message-ID: <20260808235522.380038-4-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260808235522.380038-1-atomlin@atomlin.com> References: <20260808235522.380038-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN9PR03CA0242.namprd03.prod.outlook.com (2603:10b6:408:ff::7) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|CW1P123MB8837:EE_ X-MS-Office365-Filtering-Correlation-Id: c6428c04-01b8-4958-e22f-08def5a88ba3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|23010399003|10067099003|56012099006|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: 4WRlj3EDmieJ0XgMfadQN97dMbMw+3ax0IH6y6mo/FwWfCBRRu0OIbcqifM1uTI0G9IcqMrSWDG7/v6M6b6hEiGsxWYSPkIOH1hPalYtCdt3BQMUWMcdj1im/MnfGim+oUqDuu8B+BXihrmmSFIt2tyL/bRwt7g2Jdc/+G6UjDvyO7B7fp7EA1DsYu/0/sbpivzRkTmq4eFSdO/d0NM5osYi0+iWBJQWJoGzX4Lv/Q44j0TtYRZsrfjvRfaAdElUUACC3Y5KrGdQOoyb7J8AGQAxuo5q0JZCaDLR92AojZKm0Dhx23m1tPUxLqOIZu7CbYpTH7VA97eFw/8OjYCwJTqg9pUEh/EbtkUC1GneS7rn9pAW8a7GyCCe46IcdviZw7g7jVnwtMaxLIqfkJDfsd4z7cXNH+rrAQQv6AJ+hS4aSclCTv+hBPbcRxN4I3r5K2mI8Y6Y6tCcP+3gCu57k2cOG6BIkW0aqgSMhNagGPNQfeAjAxfxqfLD7gRf4tYp6hR7Ms5C6w9f9jfP0xjLR1fCotpoJ8jzLuIPTWpPaTFdZYiNomuIPdJLSOQBk/S9wxxfpT4rThlmAnZCV0oktwpmUNgC+UNhy8EIHQXG2z1dcyvy8azIjMpSLOlT+2aAjuZz+icV66XngAWS1d2P5Wkco7FN0RXwWNVki3+HYw0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(23010399003)(10067099003)(56012099006)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Bbb6FgWWvBpo9TThEJ8WbCawMj7fCtiMZMYyBTv65kZN+R89wkZyaV6Ol4IQ?= =?us-ascii?Q?y6SckL/4YVKxtHhbVUzjd3ZgA3yshWJmrbyZxeLQZwa/jPhdEWodP0wpKIhB?= =?us-ascii?Q?8th+p0+4l2iAOPiDIR3AA62Ekfj0ms8HPXRvedfVt2EsKiDGmJIzO1E08CIo?= =?us-ascii?Q?mPwPNhAnIDADH+F7RTXgHAm/GRFWRWucsY5sI/nsg+KXwxgHe3zKBnRGJdWU?= =?us-ascii?Q?3jl2I4dXUJ0a6T4bCAHTCBBzn6O8tNTzoMPj1tZRTLQngZuRNV0ECV/PlmXw?= =?us-ascii?Q?pST/+jXq3D+7Nr8EcIcFehnkvCoQXTLb8rTQBCEZXmJnMJlsPXbLBgs1h60e?= =?us-ascii?Q?Z7S9cJdD6hB62cZ4q9q42jXGMfNIZU2mAgfnesiLaknZgN1CO2pBham81Nr2?= =?us-ascii?Q?uXA+HV0NMdUlGY4lcPUes2BFOVAD/CvzbAEnZukv1Y079B3X1jTvA405tyAW?= =?us-ascii?Q?QHFcCx8PBHd6VWHukusAXrJlfKqjZUpFWvsVOABtp0ArB56BMq0d/ITD2mxG?= =?us-ascii?Q?md5QFc4yovBN6nxh68zH0Kv9//aKG9wFKDbQwb2ezG4IiS6zfGgLBt20TpjL?= =?us-ascii?Q?uvO407t6dHlH1YUg6FTY2NDJbaUYMXIkg0CZsDhxbOI6y/QjFuNCjh2mF4UU?= =?us-ascii?Q?HSw+8E4II4S6D6VJ3hSibOrBeRy9+jMis+ISf47QP6HZREjmjSUQFM2dF9ML?= =?us-ascii?Q?dMA8FDQuKcjifV0+8YrJ/iSQ3DupIAJVckmgOqDnF40TIZtW85q35Ps+WtZD?= =?us-ascii?Q?0a0nVj2G9hITjUAZ1GiLn0Br0Uy20E5qwEp/+e3N8jCmh26RpqR6a24PTzDE?= =?us-ascii?Q?QCbswjn8qUQ8G3nCqhkE9Odt7Upc+HrpvZDcWhTLBTr8Wmkrdl519XmRBunq?= =?us-ascii?Q?YifjHPwDcat0RnNOxw9HUBnhlCCRgF32pGPuYoKErixR9jZkJNYBPnVHpTJA?= =?us-ascii?Q?GrRXYjoZT/Pi7uhkm+APTP8U385bWvXTCrixJq4DBoQCKGLsrJ1O7gqe7EaN?= =?us-ascii?Q?D/YrHUUy/v8AqFg+ckLeqcqAqI6mXvunnsFyGzGurywwfxo8o3t0VMFlvjW2?= =?us-ascii?Q?aYTmVWyWscung3TAe8JtX5oICleQiJUXVL2BN1HKaE5wZ7gOQVqhPvssmcQc?= =?us-ascii?Q?UcJqsWaSun2ExTdBw4+CiilRIC5nLwxWuKQpPM7t6F6mHW2Jdz/wgmS01MlA?= =?us-ascii?Q?dF2ozI0bLzyZSM+p6GJGZekDik3+upgI0sZgmmiFNK/BhNcMa/6fDjTU8Rhx?= =?us-ascii?Q?06WfVM5iXzbSkuGEDEc5UKWx9Wy2qWS76lpcPK8jPLg8/4PAScqARPZp8eac?= =?us-ascii?Q?iBqb2q7STJZJJwaxNO8nv8EUsiqYaMF0UJGFSKD2yB+30Zow45XbZMnQjV48?= =?us-ascii?Q?9nkvOiafm3KKSIuhoPHbFJ9ulcs7uwF1o3lA6tLsneKTyfF/vqmChm0S0Ezt?= =?us-ascii?Q?c3ikaBcAU3A5n5K+8Il4Z+4/xqHZDeSqFY/We/i7/kAqWdQ8BDYjKnY+kk6X?= =?us-ascii?Q?9dC8jUH8ZjV4KhHv08ciPXMCTlqkaLz1WBDpKkQFPDYJm9FGlwPWH/8xYLXA?= =?us-ascii?Q?Ma9rWjH9GR7JCY28j9O7IlTq7KctNGKSj3iBqAUoDgv/ldNwgYnYlQ9w17ea?= =?us-ascii?Q?nJq1J+Lm2GXv9VR2C8jAMMArnKZxu7+DkWhJexCKiBFyOC+1Eybx43EGw9Np?= =?us-ascii?Q?sUz7b0Bk6IBdK0SIMEBoGJGKii06pqrXEfwlS65yXrcnqfvgiuzgjkqij45i?= =?us-ascii?Q?xtJna2Wg+A=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: c6428c04-01b8-4958-e22f-08def5a88ba3 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2026 23:55:38.0860 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: R1VMwJcfvmD5xX7LdEphndnYd4rlEKacAG8psv6Xvq24SPRoLLfCzzP2LIUl1Alzz/xZnpJY2TuqsEjIH8k/oQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CW1P123MB8837 Content-Type: text/plain; charset="utf-8" In print_cfs_stats(), rq->leaf_cfs_rq_list is traversed using for_each_leaf_cfs_rq_safe(), which expands to list_for_each_entry_safe(). Although rq->leaf_cfs_rq_list is RCU-protected, list_for_each_entry_safe() is a non-RCU iteration macro. It dereferences pointer links without READ_ONCE() and pre-fetches the next pointer. When a writer concurrently adds a new cfs_rq to the list using list_add_rcu(), a reader traversing with list_for_each_entry_safe() lacks READ_ONCE() protection. Without READ_ONCE(), the compiler is free to re-fetch pointers or reorder instructions. As a result, the reader can observe a newly inserted cfs_rq's pointer before its internal fields are fully visible, leading to reading uninitialised data or dereferencing invalid pointers. This is illustrated below: CPU 0 CPU 1 Writer (under rq->lock) Reader (print_cfs_stats) --------------------------- -------------------------- 1. Initialise cfs_rq rcu_read_lock() cfs_rq->tg =3D tg cfs_rq->load =3D 1024 2. list_add_rcu(&cfs_rq->list, ...): 3. for_each_leaf_cfs_rq_sa= fe(): smp_store_release() Reads prev->next (cfs= _rq) prev->next =3D cfs_rq -----> Missing READ_ONCE() 4. Reads cfs_rq fields; se= es garbage data cfs_rq->tg cfs_rq->load Fix this by introducing for_each_leaf_cfs_rq_rcu(), which expands to list_for_each_entry_rcu(). This uses READ_ONCE() during list traversal. Fixes: 0601267ca673 ("sched/fair: Rewrite list_add_leaf_cfs_rq()") Reported-by: sashiko-bot Signed-off-by: Aaron Tomlin --- kernel/sched/fair.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index d78467ec6ee1..25f941ad637a 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -412,6 +412,10 @@ static inline void assert_list_leaf_cfs_rq(struct rq *= rq) list_for_each_entry_safe(cfs_rq, pos, &rq->leaf_cfs_rq_list, \ leaf_cfs_rq_list) =20 +#define for_each_leaf_cfs_rq_rcu(rq, cfs_rq) \ + list_for_each_entry_rcu(cfs_rq, &(rq)->leaf_cfs_rq_list, \ + leaf_cfs_rq_list) + /* Do the two (enqueued) entities belong to the same group ? */ static inline struct cfs_rq * is_same_group(struct sched_entity *se, struct sched_entity *pse) @@ -497,6 +501,9 @@ static inline void assert_list_leaf_cfs_rq(struct rq *r= q) #define for_each_leaf_cfs_rq_safe(rq, cfs_rq, pos) \ for (cfs_rq =3D &rq->cfs, pos =3D NULL; cfs_rq; cfs_rq =3D pos) =20 +#define for_each_leaf_cfs_rq_rcu(rq, cfs_rq) \ + for (cfs_rq =3D &rq->cfs; cfs_rq; cfs_rq =3D NULL) + static inline struct sched_entity *parent_entity(struct sched_entity *se) { return NULL; @@ -15401,10 +15408,10 @@ DEFINE_SCHED_CLASS(fair) =3D { =20 void print_cfs_stats(struct seq_file *m, int cpu) { - struct cfs_rq *cfs_rq, *pos; + struct cfs_rq *cfs_rq; =20 rcu_read_lock(); - for_each_leaf_cfs_rq_safe(cpu_rq(cpu), cfs_rq, pos) + for_each_leaf_cfs_rq_rcu(cpu_rq(cpu), cfs_rq) print_cfs_rq(m, cpu, cfs_rq); rcu_read_unlock(); } --=20 2.55.0 From nobody Wed Sep 30 12:12:45 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022101.outbound.protection.outlook.com [52.101.96.101]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5130E3451C1 for ; Sat, 8 Aug 2026 23:55:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.101 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786233345; cv=fail; b=ELCmTzzhV1mB/LxwG7NZihftUxCq4wQbAgAK9tkFmvviNqstWur7RYY3y9bkqwzSW4LjZF4xz1jMAj7QzGRlxi/0YRyinrkSJIH5sTHyGrMM8QAdVPxpJ5+6PWdKHe6wEtgubTyh8A02FePcSDcprcdKCbFjnT7rTDzezPOEJtA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786233345; c=relaxed/simple; bh=U/PjK5+0ntrjWdiV8EU7vve/v0BujAyJf1FH1IrIGQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dLvM/aUHIlkTkLt9bo11RmK9egAM0UzPBSEE5Hftjf7VCFmmjQW0hb8rnjaFRMIATKsmX0ONaJ2APJX8ftgXFEylN4KrCa85Z3PH4ZBhDUyN+dLdQe+DY0IbiJCuBOWWvsecJ6tzrDm3f8bnXgjeE6tvrkt5eKu6n54X88NTlGs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.96.101 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MrpRWgkB0bT12ZrHvQvJ2g/nOp+9L84tCCtnlGfDhBYzM2iQ4o0mVbaNT/zDUMjjHgnpzygwo+qYbszLbvGUioHWSK3N/oUpyKRiM0QWlzf8z8zBQ9e4uh0abyW2ePmo8Hv/MITlwcUa21A9uXGxiQ1WALafebjvGyyAFYylbeU3vexPRxblDm3LLWOgP7JaN/sadRV/jt4aTosqf7bV8KilFoygNx5f6p/6nSunh7XPrR/xIKSSLZArDDP4VQl2JsRJbNkVhNOFdR3i3YxblSAgKcwcaE7zyAnUQErnbWgkzTPmtmr8nz0bANtU27jy23Q5whejFnmyQtSfBnDVww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=+KpNhLbCdzIaldQ2KUILUA+UADvtEdtM4miG2J9dFsY=; b=LW4IxudaFWLPk4N1hitixhth3voOppFVSmpzbQvbHgFqK0ueMrUx+42ZvpaRQNFUlZIGrZct0wyIGQIx2+th1jT/Rmr+q/EAv5l0ROcT/NOvdcHlm0HLeozxHcolz8FGzr+i7de2hWrlbEUeVKIc0FuLsfJxYAPBhMAoWBJY2B49xr5saclJyQpU6icdECRr5U2Lvk6BOaNJN7lDBF5ofMZ6OlBQfpId9Jvrl9zMFKkfWKsllS8M//S2Kh+s28T8seVtN+LRSt7HscZn4+V4CkVoNUshDzkGM08GLGfXiSnwKNw3BEX0J0l1GcX5Rv/WJCwwyjWRsPSurJ9AV/ze1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by CW1P123MB8837.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:274::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.25; Sat, 8 Aug 2026 23:55:41 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0292.024; Sat, 8 Aug 2026 23:55:41 +0000 From: Aaron Tomlin To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org Cc: dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, kprateek.nayak@amd.com, zhanxusheng1024@gmail.com, neelx@suse.com, chjohnst@mail.com, mproche@mail.com, sean@ashe.io, steve@abita.co, linux-kernel@vger.kernel.org Subject: [PATCH v3 4/4] sched/debug: Introduce per-CPU debugfs files Date: Sat, 8 Aug 2026 19:55:22 -0400 Message-ID: <20260808235522.380038-5-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260808235522.380038-1-atomlin@atomlin.com> References: <20260808235522.380038-1-atomlin@atomlin.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BN0PR04CA0110.namprd04.prod.outlook.com (2603:10b6:408:ec::25) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWLP123MB6607:EE_|CW1P123MB8837:EE_ X-MS-Office365-Filtering-Correlation-Id: 09295737-d9a9-42fb-454d-08def5a88da7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|23010399003|10067099003|56012099006|5023799004|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: tO86a0hlfqCZHUgsQPsNPZm+tY/e3lufBGnOKYwpRJU37J4dbchpoaScuJ3t9LwAANKSojd/JFOD8HJgUP4hMI3HQPQedwQOqjjYcZQ/opbrTYhF7lelu1ucEbGx6ku5Lq6rBQfKlKxkkLQ1uwzTvv++DTqP2kEL6ZU8caGmsCers9LyULXZYsz7lD1CxTyuuD95w7aVwJKn492F8YCOIslg/OriwJWG5dS3Ne8soVxd6YjVkdJKmXRjw27i6UrMY7lncSXhAnWMhS/nwx48FUQTRGE9GXZ0p/ZCmce1/BeYeuFNmJEapZ6sgIGjFzvR9Z+RWpBRu53M9NC6IcajYY35wQwiVFPNOtAJRrqGxVZ3tgJVZL9oGhsfJ2aa/my8yzGL6C6eVq4lnsmP4KP2Ct81RZPs6WcQWfgU/TqtAXaxxPKV+VGMApaI/hLdSl4OhN3CJAcMeXw0FA51sSvUkO2Ze0G7mvjwozNV/AqghOcVTVLSh/SPjZVm2JM+JO9JHc/oizVX95CAiSRjsyJM3C5w/Fl2G9+3yGk2d19vE+EXkc8oKiEEupVMSblhDRRPm4fWE5FBSY0NF69I0qbH9l5WjHBlPio5RSRL3Bpomqav7CAXJzcFk0k3/cMb17TrKuleWAr19ADFWqnbdVxYKoQJ3F+U8H9+gHoIXYjSAKA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(23010399003)(10067099003)(56012099006)(5023799004)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?BrFZjzXyHBctshvaFwu4ITByBECOvXc3Ui5H9vYJIdAvCodv28yHytrch2O8?= =?us-ascii?Q?vl0TgdkFh/bORqhFtanWBF9R6mBsZBcMbfPxWbNKlZsPTQrZ3oJQvLwHhACf?= =?us-ascii?Q?x7d6Ll5SA3EpgwOS5tO2GpRMjKwZeFelqF1v3YXQRUwUqKTOJQgvUC5i/gwJ?= =?us-ascii?Q?A4hJku80OEISZUzF11r2rMbKcvsCresUBStnHgbvdXgZx7c4XRle9BEUxhkL?= =?us-ascii?Q?KK+mo9KD1aEASltyZUTkxjX9eALhQS8ty3K4IqZpB6Ass+L19kXHJLk9sQI6?= =?us-ascii?Q?cmTmGHwT+LOnL/ZutkdJNq4qXnaPw2ghvxzoW/xzw1p9784Ga+QuNbpbq3Fn?= =?us-ascii?Q?EYzEKDd8aNPcgoEop4QQCYuKT9pBDsXRMe6MGikW+GJK6U2RJzkCUdRV66k3?= =?us-ascii?Q?1Cw21jyRfKb3BMXdWZfF2L6ia5Bt0maHYs3abX95ibjkNGiSCutZynPY8ILc?= =?us-ascii?Q?K1Zh/R2MpRqvZ1PQmuYdaDS6VOa1r96aei1PawdFb/wQ9AGOiNYoqJEekZJ+?= =?us-ascii?Q?OCt4+sh9Xi85RMctbDwH6H7KSgz3hPBs8WNxiFYJ33FZN1i2PtqoZozZjFar?= =?us-ascii?Q?jtKNKSAChZQm+Vw58edPFMGD51PaC0eTjDtka3icewkaVrvboI4a51Zi5lPy?= =?us-ascii?Q?K3yPemGaUrFD1ATgdkuBH273qXCLw3JEzKUalXudOPo20PHCtwMlYKQ4aYY+?= =?us-ascii?Q?6MHgDQEFWRrrKEwc9PNkqXoNs/eRW9n1lITLgnLjLCjlQ713Y14UoGoaIz02?= =?us-ascii?Q?yEror9w0PDmC3z3+5UFKGiUXU/f5YoE/N7qwxd1HWAUYmIDcMkjrMi4m0uHd?= =?us-ascii?Q?KdRpwraMxR/0Cr70YHgLW9RaqjKkP+952cVlyQvJ6tEIbl5txHd+XWgqQQes?= =?us-ascii?Q?mQA1OzUKaHRO8FxvDjB4PqycZ+UUggpaHr6fkUzHj/I7BY63po6Vhf7jpLRo?= =?us-ascii?Q?8RDPZecnrcJHX0qBEqHTJ0qo1rfjWp5c0lMDBxipHQ3pktVFhUNmfEFGieg4?= =?us-ascii?Q?Ncf5foX/4WYe8ymGhT8+bhH4DI2xPu1nMdCuJ65SDlXTs0jjKcUp/S78mRsZ?= =?us-ascii?Q?mknwGN47QFYXg2hRtTVx4hvU5M9XEGbzXy5DueBsHY64F3gbPSruaj/QIh6h?= =?us-ascii?Q?L0lafIKn84bhe1QUZIJXhA3xcx5w6nh0G9oDIfz29qIF0oQ9VyS+z5FNufdj?= =?us-ascii?Q?dFNso3FdF3q7yEXMhXj18xxvbH9KIdlp6RmHUIx1GXgnqvHFwl4sxq1Za6pG?= =?us-ascii?Q?W+bDIK7/pImQUNYFANHcbNKlo2qZfUKpb9V/zxATjLAmMH9Ua6LNlUCgDg4D?= =?us-ascii?Q?gScioU9m8eoSBvMx0tIyhxWW9hlSJwHCcHk2F7/yR3OgLd5EM9Uvl2+U5kIP?= =?us-ascii?Q?1yhdriwLe40wDUA/cz9sxTWAuMtr/jOXWzk22fR7BBlHvgPGg5S1P+fmJLx9?= =?us-ascii?Q?HZ1oHh9di4/xO8eWWZAeJC4ScGAaQi/FZnPuOf8o7YDNydFaEr+JwOeR1CTV?= =?us-ascii?Q?kvw4HpJO1fI5Ldu9LqzX+7JScOlqSNIobFVagK+Mk8NrrkDdWZUmghsa4lBF?= =?us-ascii?Q?eGCduap0qezzHPIXPlCTLFfqY76fhFe8pGl5aDsHKsQg3/dPwUZKfq2de0EB?= =?us-ascii?Q?YPFLz3rrRTEJcUzmVbDJEunKlqs3JMa8GMMtcarn9n1lDtovbWqmtxsoqNEx?= =?us-ascii?Q?mw0P/Q8VMyWU6+LNC0BYZgXpQi/rmI4T9hpM6GKNedlAkO9lsUGqoD7Ylwvn?= =?us-ascii?Q?WZ/DKVDXig=3D=3D?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09295737-d9a9-42fb-454d-08def5a88da7 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2026 23:55:41.4652 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: n/uMCSY2TA06/BXg1fVn24VxA+i97udad5P9E6Ji4dRgEy2WNVC7Sk8BRdrZ3kBLkho8+6A9VyLK8NwjuqZh8A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CW1P123MB8837 Content-Type: text/plain; charset="utf-8" Currently, accessing scheduler debugging details for a specific CPU requires reading /sys/kernel/debug/sched/debug, which outputs information for all online CPUs. When investigating a latency anomaly or scheduling issue isolated to a specific CPU, accessing /sys/kernel/debug/sched/cpu/cpu/debug provides an immediate, targeted view of that runqueue. Add support for per-CPU debug files under: /sys/kernel/debug/sched/cpu/cpu/debug. Reading /sys/kernel/debug/sched/cpu/cpu/debug calls print_cpu() specifically for CPU , exposing CPU-specific runqueue details on demand. If the target CPU is currently offline, reading its file returns -ENODEV. Signed-off-by: Aaron Tomlin --- kernel/sched/debug.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index e9d40a660346..899954b83bf5 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -356,6 +356,7 @@ static const struct file_operations sched_verbose_fops = =3D { }; =20 static const struct seq_operations sched_debug_sops; +static void print_cpu(struct seq_file *m, int cpu); =20 static int sched_debug_open(struct inode *inode, struct file *filp) { @@ -633,6 +634,47 @@ static void debugfs_fair_server_init(void) } } =20 +static int sched_debug_cpu_show(struct seq_file *m, void *v) +{ + unsigned long cpu =3D (unsigned long) m->private; + + if (!cpu_online(cpu)) + return -ENODEV; + + print_cpu(m, cpu); + return 0; +} + +static int sched_debug_cpu_open(struct inode *inode, struct file *filp) +{ + return single_open(filp, sched_debug_cpu_show, inode->i_private); +} + +static const struct file_operations sched_debug_cpu_fops =3D { + .open =3D sched_debug_cpu_open, + .read =3D seq_read, + .llseek =3D seq_lseek, + .release =3D single_release, +}; + +static __init void debugfs_cpu_init(void) +{ + struct dentry *d_cpu_dir; + unsigned long cpu; + char buf[16]; + + d_cpu_dir =3D debugfs_create_dir("cpu", debugfs_sched); + + for_each_possible_cpu(cpu) { + struct dentry *d_cpu; + + snprintf(buf, sizeof(buf), "cpu%lu", cpu); + d_cpu =3D debugfs_create_dir(buf, d_cpu_dir); + + debugfs_create_file("debug", 0444, d_cpu, (void *) cpu, &sched_debug_cpu= _fops); + } +} + static __init int sched_init_debug(void) { struct dentry __maybe_unused *numa, *llc; @@ -690,6 +732,7 @@ static __init int sched_init_debug(void) #ifdef CONFIG_SCHED_CLASS_EXT debugfs_ext_server_init(); #endif + debugfs_cpu_init(); =20 return 0; } --=20 2.55.0