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 986F6C83F3F for ; Mon, 4 Sep 2023 18:08:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8C09A8D000D; Mon, 4 Sep 2023 14:08:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 86F288D0001; Mon, 4 Sep 2023 14:08:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6E8B78D000D; Mon, 4 Sep 2023 14:08:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 622488D0001 for ; Mon, 4 Sep 2023 14:08:14 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 32307160787 for ; Mon, 4 Sep 2023 18:08:14 +0000 (UTC) X-FDA: 81199699308.06.0742E15 Received: from mail-io1-f49.google.com (mail-io1-f49.google.com [209.85.166.49]) by imf26.hostedemail.com (Postfix) with ESMTP id 5F87E140010 for ; Mon, 4 Sep 2023 18:08:12 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=joelfernandes.org header.s=google header.b=FwjMvtKF; dmarc=none; spf=pass (imf26.hostedemail.com: domain of joel@joelfernandes.org designates 209.85.166.49 as permitted sender) smtp.mailfrom=joel@joelfernandes.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1693850892; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=0tEFwq12UF5zCmmOpDsVAwQyIeVifd7dDTHpnacK0UQ=; b=q3G77qV6ADFRV01/a3UCABprKTsSRyK2TkCn4HF0mxGXxwAm3d/NR/EGa+njYR85YeHgzw w4J5V38dNwVEgaLrmqAulxCh8ewUjylFyDhpRAlFb63a9MlkrYFRgfTiLxWlBgGHOxkiPG sHk++p4DZ5iYupmRVC81BimgZRjH71M= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=joelfernandes.org header.s=google header.b=FwjMvtKF; dmarc=none; spf=pass (imf26.hostedemail.com: domain of joel@joelfernandes.org designates 209.85.166.49 as permitted sender) smtp.mailfrom=joel@joelfernandes.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1693850892; a=rsa-sha256; cv=none; b=cxteeZgQ3Y+qLHIqS6j7Ys/GQMcz1mj8PdAzf3/1w5VnJIR8Kn7etYLDxM5cocMMEP0vRy 5XqQKCN0suRuAs4LtiLM4zH7re89EZtKwzFmUz7CtOYhzr+T3PJ8/1l0l8nxLSqkmrpP4V wxZwDIRJECNWAbKB8pAYRx+K0EbBMfY= Received: by mail-io1-f49.google.com with SMTP id ca18e2360f4ac-7927611c54bso66775739f.2 for ; Mon, 04 Sep 2023 11:08:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; t=1693850891; x=1694455691; darn=kvack.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=0tEFwq12UF5zCmmOpDsVAwQyIeVifd7dDTHpnacK0UQ=; b=FwjMvtKFOLsS74bfjomYoCZlpyh+M7f4l1xyNYYBy003GG4SAP9QmgzaUMUb5cdcXI hM9eOKcbrA1b5JGu8AWyPQZer0H+e/lmt1Sk7nrh30sPkw/An0o3CsyCON0QCBuxb/k2 hRU8kB5CP9tHnllUxlgfAx1mKMlQYYNjx3zU8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693850891; x=1694455691; 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=0tEFwq12UF5zCmmOpDsVAwQyIeVifd7dDTHpnacK0UQ=; b=EHIiarq9duxis7+SO1f9hiIq3ZEW4Xsp8aN4lb/OcBJ1js/FE2HM75Za+otCoRYXhw xkCZJpWa+RaXVCiyTdKafozWZWxy0Lf/RB5bgQEDCE5ChOrWiYfKUkKUNeTTnRrz1sYg 976yWfUeszpJKpaB5aBOFgTkeXBMjAP2VggObE89ZTEH9fuxLzK/rHvkwNo3c2XjRJtj sFXSgrliSXa6WjoH5SkMbG/Vl4UXNU8Afq6cRWnopxergo3z7JbcJly8R3D02Ecn4l28 vwC1cZj8Z62Y+boDhdOVOsBGhMmydLoHXA9iAgqHfd0WNY+x+ApVJjGGriDjdtvdglnZ rIjw== X-Gm-Message-State: AOJu0Yyc5GIVTSluSZkIPaaNIbaS+7OOfcgQVJ2OYtQHYfYUNJnVcau6 KQdocW8zlt5S6mMmNWL191sd8A== X-Google-Smtp-Source: AGHT+IEHZt1WRuZqA2Wmfc55FNOuRsD84phTBzjghuiQXLfZnRv1pVitPty4syUUp7DZ6Ov+pU33MA== X-Received: by 2002:a5e:a618:0:b0:794:c9a2:5fe3 with SMTP id q24-20020a5ea618000000b00794c9a25fe3mr12586673ioi.4.1693850891310; Mon, 04 Sep 2023 11:08:11 -0700 (PDT) Received: from joelboxx5.corp.google.com (156.190.123.34.bc.googleusercontent.com. [34.123.190.156]) by smtp.gmail.com with ESMTPSA id g15-20020a02b70f000000b0042bb13cb80fsm3520216jam.120.2023.09.04.11.08.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Sep 2023 11:08:10 -0700 (PDT) From: "Joel Fernandes (Google)" To: linux-kernel@vger.kernel.org, Andrew Morton , "Paul E. McKenney" , Vlastimil Babka Cc: Zqiang , Zhen Lei , rcu@vger.kernel.org, Matthew Wilcox , stable@vger.kernel.org, Joel Fernandes , linux-mm@kvack.org Subject: [PATCH v3 2/2] rcu: Dump vmalloc memory info safely Date: Mon, 4 Sep 2023 18:08:05 +0000 Message-ID: <20230904180806.1002832-2-joel@joelfernandes.org> X-Mailer: git-send-email 2.42.0.283.g2d96d420d3-goog In-Reply-To: <20230904180806.1002832-1-joel@joelfernandes.org> References: <20230904180806.1002832-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 5F87E140010 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: grs8z9ergg7amo443muz85xszz4sidge X-HE-Tag: 1693850892-381437 X-HE-Meta: U2FsdGVkX19eyFq+6BeiL0jnUnfGSQbw4mVgMgSm+1+DDHzfLyJa5kJ8T1RMlCnpqzO0GxFexF7MRz4fJ5EqdAjo5WmwY8sTuHns7S1stu2kBJmxV+ninG/AvHV/WKcR6UBm0WxFYpWxYVTt9IhMZLUGyWRSzGF1yvi8Tbq2t9DdcX8FY4TJTxaowzk9x2tHT1W3qQXRZyj73MHuLyEwBoIEsv1guvRwru8dBJIg+ml7yAVOwuPruv1xTvqi1PRmsgOhffA5Jk5E9bSNFJADYAHS3mR3QGCGveszxoK81TWTxLk88eA4FJq9Sfm1KxC7oH7sfIznKKhhcqIUPad+6h+abA5DJ5fzU5oweC1hpwnqjVli7vxyds+Yp6BSNT+A0RV4Zx8H7diRSkjEmxVBRQxM4BdoujdLQ40gKy/4n5OKgY6Z/kLQHjydnlrLIl0UXjatPe0D5cVDHpQZZhgWPsPYCjgev7MEk/mc8RoFR3BsGPk4DzOHywnLkPlbarSKOjslZuRxB0/gOxKWkk+Hjhx6sijwc2TXf5BKbVHs7EMGHtTst4278iS6OTWoKB0XTjidNzOB1hYHqND3wm2VP4du/Co+JfWgkA0mHkdeqlfQ+kDqe+wUqW29wuN8CjSju6Z/5aDq5TItsCR0S9jcVd/5W+YKlK5vxDcoVGP8hIjzs+t58r23nDxzqrajH3w0vTO3ONWqKfU/OahNuJhK4ZGwPav90oWX+Tjo7cQlr5k78bEqdQM/T1dWfATiVOoZ0GkWrY1pSRRoRiPOc28NqgFu0voknSlPXsqFz3nj/FLM/hk17tnyHbyxcsZYJQLCJVoayar25w6zJ0SXUac8eSPr0ty+UMq1+yOdzA4ETlfv4JFYesZMTo71Y+CGq/0I8nrjFZJKbTdiPbT9+CexWejl+xTRD23fl57q2Lb51yT8EjItKtY3nF6OSdDzPEjaqIL0ZtGQeuq6nHY5jyX rkzUGIPj Rcc5OCJPiGwEud1Y6GRGdJ6Xxe0qIo96m0RkYEJLeYx+VIuJNOMGPrb9SfmYcqnrv100LzT9vgaAvsgaWZ/GrOHc29V4fwc1w7nXk0fnsxLQcRrmlHUhB5WsNLkQbiaYVjZC3Qlp+V5DB1ZjpDQeJOKlpiRzE0HeYPQ2vvutHKhI0s/ByDZNmX4214FNWNh5PHWZxr3OvBpALEWsehS3DxpnoPBW6SVzqKRba81Y8Wc3O+dr0GMj0O0qW6rDyNkPMSCS88CIq0inkx2qZnJ9JpIIvwE5B7C2Drvn2A6gHUESoVlwDrceBzFqkSraGqgwvGk+/AU5zt48hElaR//+G1y/8Nh8xqv5j8TtGKwV1VA4B9wKevSva6uO7gh+NonBkqm9gGpBE4Ad19TAGUXvOzTJFgX+RCRoKML8kRYqRyCjE1fkmBb1nrZlHATIc8Nl9SxNgmE1g6z6nHmskaagafxjeqr24tdO/ldTd2ITJAMr1MknWXH++r5IoUUgJOf+0ySlSgN0/YauOcu8jfrZ5L34GWtVtrvAkUlJ2R03Vwljc16zIJhpHd26n157yRmmzpRJkLkS5RdG39XerFQfmWogFCYosaAanaAtUCFfumj2NrBrIKzhboDrJzbmbovV0i/dj7dAi+B1xm8w0IXYcBOmJbrzzWvZnVnHQrypFA8jUUyWhiC0t4jDuPKZtIWRAF5FuSpDdJy9gPoy1ySbGRzrIlt9YNZkalOvo 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: From: Zqiang Currently, for double invoke call_rcu(), will dump rcu_head objects memory info, if the objects is not allocated from the slab allocator, the vmalloc_dump_obj() will be invoke and the vmap_area_lock spinlock need to be held, since the call_rcu() can be invoked in interrupt context, therefore, there is a possibility of spinlock deadlock scenarios. And in Preempt-RT kernel, the rcutorture test also trigger the following lockdep warning: BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48 in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 1, name: swapper/0 preempt_count: 1, expected: 0 RCU nest depth: 1, expected: 1 3 locks held by swapper/0/1: #0: ffffffffb534ee80 (fullstop_mutex){+.+.}-{4:4}, at: torture_init_begin+0x24/0xa0 #1: ffffffffb5307940 (rcu_read_lock){....}-{1:3}, at: rcu_torture_init+0x1ec7/0x2370 #2: ffffffffb536af40 (vmap_area_lock){+.+.}-{3:3}, at: find_vmap_area+0x1f/0x70 irq event stamp: 565512 hardirqs last enabled at (565511): [] __call_rcu_common+0x218/0x940 hardirqs last disabled at (565512): [] rcu_torture_init+0x20b2/0x2370 softirqs last enabled at (399112): [] __local_bh_enable_ip+0x126/0x170 softirqs last disabled at (399106): [] inet_register_protosw+0x9/0x1d0 Preemption disabled at: [] rcu_torture_init+0x1f13/0x2370 CPU: 0 PID: 1 Comm: swapper/0 Tainted: G W 6.5.0-rc4-rt2-yocto-preempt-rt+ #15 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014 Call Trace: dump_stack_lvl+0x68/0xb0 dump_stack+0x14/0x20 __might_resched+0x1aa/0x280 ? __pfx_rcu_torture_err_cb+0x10/0x10 rt_spin_lock+0x53/0x130 ? find_vmap_area+0x1f/0x70 find_vmap_area+0x1f/0x70 vmalloc_dump_obj+0x20/0x60 mem_dump_obj+0x22/0x90 __call_rcu_common+0x5bf/0x940 ? debug_smp_processor_id+0x1b/0x30 call_rcu_hurry+0x14/0x20 rcu_torture_init+0x1f82/0x2370 ? __pfx_rcu_torture_leak_cb+0x10/0x10 ? __pfx_rcu_torture_leak_cb+0x10/0x10 ? __pfx_rcu_torture_init+0x10/0x10 do_one_initcall+0x6c/0x300 ? debug_smp_processor_id+0x1b/0x30 kernel_init_freeable+0x2b9/0x540 ? __pfx_kernel_init+0x10/0x10 kernel_init+0x1f/0x150 ret_from_fork+0x40/0x50 ? __pfx_kernel_init+0x10/0x10 ret_from_fork_asm+0x1b/0x30 The previous patch fixes this by using the deadlock-safe best-effort version of find_vm_area. However, in case of failure print the fact that the pointer was a vmalloc pointer so that we print at least something. Reported-by: Zhen Lei Cc: Paul E. McKenney Cc: rcu@vger.kernel.org Reviewed-by: Matthew Wilcox (Oracle) Fixes: 98f180837a89 ("mm: Make mem_dump_obj() handle vmalloc() memory") Cc: stable@vger.kernel.org Signed-off-by: Zqiang Signed-off-by: Joel Fernandes (Google) --- mm/util.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/util.c b/mm/util.c index dd12b9531ac4..406634f26918 100644 --- a/mm/util.c +++ b/mm/util.c @@ -1071,7 +1071,9 @@ void mem_dump_obj(void *object) if (vmalloc_dump_obj(object)) return; - if (virt_addr_valid(object)) + if (is_vmalloc_addr(object)) + type = "vmalloc memory"; + else if (virt_addr_valid(object)) type = "non-slab/vmalloc memory"; else if (object == NULL) type = "NULL pointer"; -- 2.42.0.283.g2d96d420d3-goog