From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A045BC05027 for ; Thu, 2 Feb 2023 03:01:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E56366B0071; Wed, 1 Feb 2023 22:01:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DB7BF6B0072; Wed, 1 Feb 2023 22:01:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C0A8B6B0073; Wed, 1 Feb 2023 22:01:20 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id AA28E6B0071 for ; Wed, 1 Feb 2023 22:01:20 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 7F64A80E41 for ; Thu, 2 Feb 2023 03:01:20 +0000 (UTC) X-FDA: 80420850720.13.A97A886 Received: from smtp-fw-80007.amazon.com (smtp-fw-80007.amazon.com [99.78.197.218]) by imf09.hostedemail.com (Postfix) with ESMTP id E5350140003 for ; Thu, 2 Feb 2023 03:01:17 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazon201209 header.b=HcX5rpOt; spf=pass (imf09.hostedemail.com: domain of "prvs=3907760dc=kamatam@amazon.com" designates 99.78.197.218 as permitted sender) smtp.mailfrom="prvs=3907760dc=kamatam@amazon.com"; dmarc=pass (policy=quarantine) header.from=amazon.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1675306878; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=q05uX48M20nMrd/E/JzYkhFE8vi24nWdzw3LRUurN1U=; b=TLb8ac5sXKBJtPBPFewA3uwk6djjToeAQgCpI2br/A9b8A/wbUs53rAIIO3KMqUC6Onlvs osXVO23hA54kn4WhmqfNCJaNjytFj5oaKlpAm6lp3lQ+eWD1KuinAdMt/E5VXQTtIqQOY6 IMBTarrJ9LebJ8ICD0G7Q5DWXgOQhUY= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=amazon.com header.s=amazon201209 header.b=HcX5rpOt; spf=pass (imf09.hostedemail.com: domain of "prvs=3907760dc=kamatam@amazon.com" designates 99.78.197.218 as permitted sender) smtp.mailfrom="prvs=3907760dc=kamatam@amazon.com"; dmarc=pass (policy=quarantine) header.from=amazon.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1675306878; a=rsa-sha256; cv=none; b=IwxXeL+aYF3T1fFm0Dt06qHgtT5VcV2FVY/DoO3XUP5IxdDJBmIzEa09HvYnHaoiK3hZL5 cOew5+mfY0WNLj/wa0QQYaoozUSrkPT+zCxyU3UV/bTlXuAolx85xHUaOVMHPvLuVHS5+e dJprC66dFEoOIHkCtKZthRmUhXWcdGc= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1675306878; x=1706842878; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=q05uX48M20nMrd/E/JzYkhFE8vi24nWdzw3LRUurN1U=; b=HcX5rpOtFb98NVhPN9jx9aTIl4HH2p3sZo/+yHAtAeX7rjPglZrGXsHG uEOinYadteFZAD2tNtbTxstkviR2OE7IJDfFc85bfyK9FAGe1DYH501Q3 KhLovxwG3N/PsgTywlvcZMRcltXCrjOGkAMYh5G8kJoXkq5ousMfiAXZH w=; X-IronPort-AV: E=Sophos;i="5.97,266,1669075200"; d="scan'208";a="177554059" Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO email-inbound-relay-pdx-2a-m6i4x-83883bdb.us-west-2.amazon.com) ([10.25.36.214]) by smtp-border-fw-80007.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2023 03:01:17 +0000 Received: from EX13MTAUWB002.ant.amazon.com (pdx1-ws-svc-p6-lb9-vlan2.pdx.amazon.com [10.236.137.194]) by email-inbound-relay-pdx-2a-m6i4x-83883bdb.us-west-2.amazon.com (Postfix) with ESMTPS id 650DA61AE4; Thu, 2 Feb 2023 03:01:16 +0000 (UTC) Received: from EX19D010UWA004.ant.amazon.com (10.13.138.204) by EX13MTAUWB002.ant.amazon.com (10.43.161.202) with Microsoft SMTP Server (TLS) id 15.0.1497.45; Thu, 2 Feb 2023 03:01:15 +0000 Received: from u9aa42af9e4c55a.ant.amazon.com (10.43.161.198) by EX19D010UWA004.ant.amazon.com (10.13.138.204) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.1118.24; Thu, 2 Feb 2023 03:01:15 +0000 From: Munehisa Kamata To: CC: , , , , , , , Subject: [PATCH] sched/psi: fix use-after-free in ep_remove_wait_queue() Date: Wed, 1 Feb 2023 19:00:23 -0800 Message-ID: <20230202030023.1847084-1-kamatam@amazon.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.43.161.198] X-ClientProxiedBy: EX13P01UWB003.ant.amazon.com (10.43.161.209) To EX19D010UWA004.ant.amazon.com (10.13.138.204) X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: E5350140003 X-Rspam-User: X-Stat-Signature: sasp73q9ircb5h3rfq7ekchc8uoqrq1z X-HE-Tag: 1675306877-197798 X-HE-Meta: U2FsdGVkX1/xduXbF2aQszRb83qe3kP/ixhKLw0xBwJw5FePipcBtrIL6vc2VE+U86WZKXYbuz3WeR4TKq39TIzJEVJE+E9bNxljmvPC5sfTUvnMplSWJaNUXfjLhZ/yJ9lay/i7ka50bdAhWhqrAsSpIhSNuwhPUfP2C/pQA/MZgdyiVfKllrYpDtseS8eCARfB/Z5IeNakYg575JGocRetcBL/Bc29Lkz7zsZcKJLw4KwCnBbj+eIM9f1WAh0kIs/GDirDQp0tnDnfLZZjGngMKWbCCcl7guKYupQpmlRvlQBpEd6RMtBsj2v3KGoNVbrowOyYNGqwuxCOfb72BSv0/O5WP8yiaseXNASsU2cAspuDHzug6L/iylWtoEDrE87I3FBxFcPVoK2DXPRLv8UMZyBsmYCnSRA+yOR6S7ZO/98X1S1oHnWxyuIzV8mKJsSSsVXUa336/S+Ktzwu1tM7PbFYb6gYQUGnQ6CSP5VBMB7n8P/9QcbltguhH8rwRQQQkNb73M1kr5PoroIMsoNG7lQN7IUiKnawc917OJ/eVgSmELoDmeZxuRrkEBWRNBf06YZkpijM6FyFUpdCzwVVifyiKYeiiDHZDwZXnyLYWDP5HMNGnYXM+5A1MsCknySufZlzpXjZXwyMQoL2tt5KbF4qSPgzPIzUfpXyTGSB+X2rcf2hy5hdpjPgDYYUvRlsmQXuJ+xeOGTTuIgGDE5CA1q9+gV7ibFm1IPh2qjvk9/9SRdUEpkOLI2xsjGyVlNcVU5j/YYVqkN6I9vfpBb/lfOgnV0BcdpHkyBF7JF0cb50g7XdfgzWqQY9lM8KWgAGfIUXAGyUboPDUkgXxEoAQs3AmETi++YvICIMzkEJ0x+3X1u0UdnNBeEZfcBCCAxih4tajnHKoPKp6NZRj7Vv3PstUnyvZMmzEeFtNvTl//GReXO6tFjnd11fEMu52ypQ7iGSOWHRWYmiujm Ky346xv6 XfFWjgBEeBD+m5cuFmTnz2s5iTerKGbJCcPFgwNtgeQbHyqXlTA6PsCc/OVRNaaEVoltIhbEKq3mXe3Vm6tS6TCNVmYsJOx2/fcaNonGRrqZQ7iCG+e5aJl8F0PEQIpN+oATBet7ECHPRskMJXFaoaPxP5lvtJvLIbr+OHzG6UWOoiRFkS2WHBlQfV92NPti4Vn7JMI2dTL7R8NcNV1iQLBj9MhcUKkmx9xH8B4EqPR22WU8VGw1BcvYoPlSDLyDdXtjD2jdydBqWu6a3MherY0BsOlQCrDe5pFt7bdhtezdAO7AP6exnYpzQnbt3klfYcYbFS36sVGl6dyWvwNxwnAbE84cJ8/BI35FpNk44UsBIkFqt5+nlcEWkQXs/ZMRKrtRivKDbGqZkS6seV5u3JC7W+dQoZ8CY8xg21h2k5sKcrE1dSDpbudp1ovKLRGlh8gJBMYn1NpOkP0Lt7zLh6K0ylWRax6o9d9XfM7LHqhDaJc+bS195HlJye+q1PBfTptJzc4+Fv2Y2C6YvHP+tfiLPQzUD9pBwUFxiW6NPy16biDe2Ua1ZzuVgNg10+PmtuW+vMohJ+mBpLNKMQ95qah/Emm9ufdSDhmCuO04kcCoDOFnDmOP/z4lu0+6T/T+UcXHrHEZ5wpK079euY4bvb9efwEQ6kxrzxLgyyBGkmv1qYc9ASS9vm/hfQ/lxQh04sB3S X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: If a non-root cgroup gets removed when there is a thread that registered trigger and is polling on a pressure file within the cgroup, the polling waitqueue gets freed without clearing the queue and reference, then it can result in use-after-free as below. Use wake_up_pollfree() instead to ensure that the queue and reference are cleared before freeing. BUG: KASAN: use-after-free in _raw_spin_lock_irqsave+0x60/0xc0 Write of size 4 at addr ffff88810e625328 by task a.out/4404 CPU: 19 PID: 4404 Comm: a.out Not tainted 6.2.0-rc6 #38 Hardware name: Amazon EC2 c5a.8xlarge/, BIOS 1.0 10/16/2017 Call Trace: dump_stack_lvl+0x73/0xa0 print_report+0x16c/0x4e0 ? _printk+0x59/0x80 ? __virt_addr_valid+0xb8/0x130 ? _raw_spin_lock_irqsave+0x60/0xc0 kasan_report+0xc3/0xf0 ? _raw_spin_lock_irqsave+0x60/0xc0 kasan_check_range+0x2d2/0x310 _raw_spin_lock_irqsave+0x60/0xc0 remove_wait_queue+0x1a/0xa0 ep_free+0x12c/0x170 ep_eventpoll_release+0x26/0x30 __fput+0x202/0x400 task_work_run+0x11d/0x170 do_exit+0x495/0x1130 ? update_cfs_rq_load_avg+0x2c2/0x2e0 do_group_exit+0x100/0x100 get_signal+0xd67/0xde0 ? finish_task_switch+0x15f/0x3a0 arch_do_signal_or_restart+0x2a/0x2b0 exit_to_user_mode_prepare+0x94/0x100 syscall_exit_to_user_mode+0x20/0x40 do_syscall_64+0x52/0x90 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x7f8e392bfb91 Code: Unable to access opcode bytes at 0x7f8e392bfb67. RSP: 002b:00007fff261e08d8 EFLAGS: 00000246 ORIG_RAX: 0000000000000022 RAX: fffffffffffffdfe RBX: 0000000000000000 RCX: 00007f8e392bfb91 RDX: 0000000000000001 RSI: 00007fff261e08e8 RDI: 0000000000000004 RBP: 00007fff261e0920 R08: 0000000000400780 R09: 00007f8e3960f240 R10: 00000000000003df R11: 0000000000000246 R12: 00000000004005a0 R13: 00007fff261e0a00 R14: 0000000000000000 R15: 0000000000000000 Allocated by task 4404: kasan_set_track+0x3d/0x60 __kasan_kmalloc+0x85/0x90 psi_trigger_create+0x113/0x3e0 pressure_write+0x146/0x2e0 cgroup_file_write+0x11c/0x250 kernfs_fop_write_iter+0x186/0x220 vfs_write+0x3d8/0x5c0 ksys_write+0x90/0x110 do_syscall_64+0x43/0x90 entry_SYSCALL_64_after_hwframe+0x63/0xcd Freed by task 4407: kasan_set_track+0x3d/0x60 kasan_save_free_info+0x27/0x40 ____kasan_slab_free+0x11d/0x170 slab_free_freelist_hook+0x87/0x150 __kmem_cache_free+0xcb/0x180 psi_trigger_destroy+0x2e8/0x310 cgroup_file_release+0x4f/0xb0 kernfs_drain_open_files+0x165/0x1f0 kernfs_drain+0x162/0x1a0 __kernfs_remove+0x1fb/0x310 kernfs_remove_by_name_ns+0x95/0xe0 cgroup_addrm_files+0x67f/0x700 cgroup_destroy_locked+0x283/0x3c0 cgroup_rmdir+0x29/0x100 kernfs_iop_rmdir+0xd1/0x140 vfs_rmdir+0xfe/0x240 do_rmdir+0x13d/0x280 __x64_sys_rmdir+0x2c/0x30 do_syscall_64+0x43/0x90 entry_SYSCALL_64_after_hwframe+0x63/0xcd Link: https://lore.kernel.org/lkml/20230106224859.4123476-1-kamatam@amazon.com/ Fixes: 0e94682b73bf ("psi: introduce psi monitor") Cc: stable@vger.kernel.org Signed-off-by: Munehisa Kamata Signed-off-by: Mengchi Cheng --- kernel/sched/psi.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c index 8ac8b81bfee6..6e66c15f6450 100644 --- a/kernel/sched/psi.c +++ b/kernel/sched/psi.c @@ -1343,10 +1343,11 @@ void psi_trigger_destroy(struct psi_trigger *t) group = t->group; /* - * Wakeup waiters to stop polling. Can happen if cgroup is deleted - * from under a polling process. + * Wakeup waiters to stop polling and clear the queue to prevent it from + * being accessed later. Can happen if cgroup is deleted from under a + * polling process otherwise. */ - wake_up_interruptible(&t->event_wait); + wake_up_pollfree(&t->event_wait); mutex_lock(&group->trigger_lock); -- 2.38.1