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 4687AC021A9 for ; Mon, 17 Feb 2025 22:57:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B01E02800B2; Mon, 17 Feb 2025 17:57:10 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AB0E12800B1; Mon, 17 Feb 2025 17:57:10 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 978662800B2; Mon, 17 Feb 2025 17:57:10 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 7B7B02800B1 for ; Mon, 17 Feb 2025 17:57:10 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 2F9C2A13F7 for ; Mon, 17 Feb 2025 22:57:10 +0000 (UTC) X-FDA: 83130949020.12.9E988EC Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) by imf03.hostedemail.com (Postfix) with ESMTP id 426342000A for ; Mon, 17 Feb 2025 22:57:08 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Y+Gf5Sj9; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf03.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.53 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739833028; a=rsa-sha256; cv=none; b=HMFCp7mHrHDG81BuPkxnU+AO/0IOe2Rs2vMw+sTsaZ+zx2I0v3yqY8uL22KxyJR551qhp4 p3XcIsIhrjZVVOWXrumVfDRlJucRrmx2STqwzhJ+sVted45CgsBftxPomvZzHO2QZtTavT +qbqtBq8/qZheXfzHM4iHj5+HjYG9pU= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Y+Gf5Sj9; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf03.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.53 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739833028; 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=l0Pzx9XFyMoQwaq/j01KSTY/+B12ar50FlSTQ8at2Kc=; b=ykJrwFXf6bvWJoVB1NCzmPTUaigCawDm1OeP08UwSfjvnfCjXLhlljwXpwEB8EvFQ4rI/n 7Xf6h9bbhZj/ykPal5ZnpT4Uw3oGQjPDAQPBrfQTDY1Ggh6rD5EB8uqZu5lrTH0FEZYfnP O+cBvPgDElY/5wFMSDLvG0O2JeaIKDQ= Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-38dd9b3419cso2561911f8f.0 for ; Mon, 17 Feb 2025 14:57:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739833027; x=1740437827; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=l0Pzx9XFyMoQwaq/j01KSTY/+B12ar50FlSTQ8at2Kc=; b=Y+Gf5Sj9rvToE+VvOfXNVXI0IyZsC8FrCAO3CfLyMtCIusLxEbXcGNPFh2FtT0Twgv /0ztXPvrV3QBu6h3Kj0Jem1FDzhBM29M4jy/zQEwgy8hHbEwFi0ugYfRQeNMNQh/uACT q6GMXe7V5VeXv0cFY+sAAtejRYDuECeZxAJikjY1KqRQLLJfJs+pOxqhZXpwBm4jek6z 39+UtxWZX2yQ2xUeLbN/Si95z0gQLgjBqdkV0cvagQ1KPgUP0Hkgk0RtoIrHjk3gZ+nR VQFqLKGPjEWsLWP1wL9Bn2KcXrCYnTeKcrCVF0Il2G6EqrJ5krCGR4yz5157ZkDlfPu7 2UKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739833027; x=1740437827; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=l0Pzx9XFyMoQwaq/j01KSTY/+B12ar50FlSTQ8at2Kc=; b=sebts4ofl8+HJAeI9MDRu8HkBOqvE8tcCv2JnzAXq72HK+Hj35hYcMHgN5Wm1jaWUX 77VDVNzTiaiO+EQ+xsg8xo/C79CviIQPXRAJ2Pn4eP47JsBjTS+u1zGLH/HnJVs0j8DW GxsxhYIDhx4+xw6/pbUXnHT3VxOJ21R67KlsO9Z8isrh+1PGrP5GGNmd1VyAkXLlwBPv ZWi1a9I4aiDFbM1VZxqbk9fSo7a+36nbeVFLw3rjaGLvuQv0pEx14rO9cZot4AIpF6MW kocWu9K3l8RXfTKXcKU4d/tpYTQ/SIFC7IwxiS3fJ8y5A5Pe5RXeA4cHWY2AjNKFeDhL 6Iqg== X-Forwarded-Encrypted: i=1; AJvYcCUtAR1ogN7TdxbbuCgIVheqsaBQiADHWS87qT3E99udPHaLc93SCwfNWf5k/COF4Q7UvVKWFBvLzg==@kvack.org X-Gm-Message-State: AOJu0YzYCo/8b1C9mZmwymVv2Jm0tnEMZUxE+gwVxFsaqfofBfUL9Wq6 ICBCyDT5QLYXAvMBY6f2r+NOcP0zTy/+F6oqP6ITGpnrQTe+Tb6TqXnJu0QFgkHAvmGewwR7w4U c2w7T3SsRXDIoPFAk+oJFKCnsclo= X-Gm-Gg: ASbGncsOz6UHOfViKqrW6/4LEceogwsvQO6U4iOjFIcF16k4LMoZjfVuEaWy0bn5hm1 H8MtCcrB2Gk+hkadSczlDRly3LoqeGxJ8G/7Pn0Yf0cqKz9TrfJhKbedzEr13Qx1LJ8iqzRBxxb I= X-Google-Smtp-Source: AGHT+IGybFvLWtxMVt6CWfv9HGPQQHrOMgU4/EA+mLEw5ZxQDNlqsMte/xjHUZsgZdgs8/zG/a05yUv4LsD1+YgesEY= X-Received: by 2002:a5d:468d:0:b0:38f:2b34:5004 with SMTP id ffacd0b85a97d-38f33f4e2aamr9008909f8f.38.1739833026353; Mon, 17 Feb 2025 14:57:06 -0800 (PST) MIME-Version: 1.0 References: <20250217204402.60533-1-longman@redhat.com> In-Reply-To: <20250217204402.60533-1-longman@redhat.com> From: Andrey Konovalov Date: Mon, 17 Feb 2025 23:56:55 +0100 X-Gm-Features: AWEUYZmSmtSFKImfOr51DZheaPH7tbwA6sqeu5erz96SBLmh7o8z1iWhPYcqCvY Message-ID: Subject: Re: [PATCH v4] kasan: Don't call find_vm_area() in a PREEMPT_RT kernel To: Waiman Long Cc: Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Vincenzo Frascino , Andrew Morton , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt , kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-rt-devel@lists.linux.dev, Nico Pache Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Queue-Id: 426342000A X-Rspamd-Server: rspam12 X-Stat-Signature: umh6k8saff9sis7w51x4ij4n7wqohfm6 X-HE-Tag: 1739833028-308109 X-HE-Meta: U2FsdGVkX19WXnPMh1mfOtsR7xVxKPT6TCqbHx0dtkjhKJu9qVAq6JaFYXH1bsqsTOmJdmhsAtwcKrk3lQemn6nLzvNgR0F5jiqrHiOCmccgk+89ihtT7m9Z7qY2JLfssSG+ywJtmkAcixGOH/VeXAvBFODU4iikYcNWTOj8HYCE4SIsS85XSazwGufTCh8BIg6MGZYUrWhqAXwEa3qo5jZ7KZtiPPStLE6ZSfRZmPi9uGNXD0C12bOa7ibSuTPAJ/7UYjdvDK6M621SplUdoRijoX9LYTO+zGucKpR0t8TnmF0C7MYz/zzjrBoin9ba+CDVV9lU+ILyQRRyV8VcmZhhACmSnM8AJZOsOqmGLbyE4vwyfPtm6m1rqanol8pe5MB3Q0SYlRDzXPNOUrDfTDF19r69KhwcoYC7NuFARJwb4ABG18UCtDVUVykI+MEylzlud3QK88TzRCkX4MHaaMtq3NNBmH7Ee56TPmbU0humiTu1Is90MjKPKwdTy6DOJs4sFGT7nD2S/dmB+4G7MOJm9GPMGZU6gZjdazW73DjV5CdMSc0A8jPvH25bjwYX2ePIbjTl9CUratXswruT3aE4pmpp78PEBRqsl2eBEeLa7rnzhqyX06YushRpmblhp1D7e6ad4DwM5pMdXO+Z9szDG8OQ7zrGcT5pNsVAHgk2qMnGyJ2TCYMxEXPnCMYdrM1bYckI4bYabPh51lCuENNSPcIlLwNeBZ6Fc7J7zoDWpZpUK3wmD9LoBJIZqzZakCZDPS0sJdVGIa2+wyIDI0D3Naml1f/FNgNt6OBj/SB3+56aZMWZmhkVqZw4onpPexelXOCm40GLb2GwSq/1wg/wtA7G2tLqy1gAAw8Ktym86cV4N7NAbsNLjrSlbJYFalvMF4AjGW1Ys/Z6c75YFxV85JemL0pd4+1cUOtShHX3em2OMoFDfm2jBknuvtNm4dPGJqOm3vgiKwhRtyb rWkOV6kP LebY6HxV/e7GixkLgFmPTgm99AiTknRi86db/j/jniEQfGM4omJBT1gUguIpPhjdhXE3t3AsQ/GNH39sW8MPjAZ0Ovg5hJB06vLrQ44URSAPFTCR1b80gmbRAr/Q09Cs8GNrS0fI7BfoqIlm3TrQd1Yevy1OJFBoSvYcyN0Qd5fGxLlHShWvrqAldK6RFu2h+Se0Y7tiyBObuPEEfywy/aEyX6Yu45yeNjPpfi/1Kv6VLawYG8uOMvZ5A39S8EbFeg7KAFICWJMeP/C2BXedBOfdGQBxOXLdv93ABmqLybOA6zHStz5LDqhoxeZndHGdrqx/9bKI84OQxmOLdE576KEcObptBU56lgM7d+Er+Ghb96SypB6qkwYqOv3q3rppyxqXQ/1PW3XjnvE66q795i0A0PXN20c5IgI5zxC1CK1gSvmlfwoWDdcl99C/e1kSKpR6Hl/GN1xxM4gHah+QcJkCe4suFMFjVW9A54FBCX9Dg9Qs= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Mon, Feb 17, 2025 at 9:44=E2=80=AFPM Waiman Long wr= ote: > > The following bug report was found when running a PREEMPT_RT debug kernel= . > > BUG: sleeping function called from invalid context at kernel/locking/spi= nlock_rt.c:48 > in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 140605, name: kun= it_try_catch > preempt_count: 1, expected: 0 > > Call trace: > rt_spin_lock+0x70/0x140 > find_vmap_area+0x84/0x168 > find_vm_area+0x1c/0x50 > print_address_description.constprop.0+0x2a0/0x320 > print_report+0x108/0x1f8 > kasan_report+0x90/0xc8 > > Since commit e30a0361b851 ("kasan: make report_lock a raw spinlock"), > report_lock was changed to raw_spinlock_t to fix another similar > PREEMPT_RT problem. That alone isn't enough to cover other corner cases. > > print_address_description() is always invoked under the > report_lock. The context under this lock is always atomic even on > PREEMPT_RT. find_vm_area() acquires vmap_node::busy.lock which is a > spinlock_t, becoming a sleeping lock on PREEMPT_RT and must not be > acquired in atomic context. > > Don't invoke find_vm_area() on PREEMPT_RT and just print the address. > Non-PREEMPT_RT builds remain unchanged. Add a DEFINE_WAIT_OVERRIDE_MAP() > macro to tell lockdep that this lock nesting is allowed because the > PREEMPT_RT part (which is invalid) has been taken care of. This macro > was first introduced in commit 0cce06ba859a ("debugobjects,locking: > Annotate debug_object_fill_pool() wait type violation"). > > Fixes: e30a0361b851 ("kasan: make report_lock a raw spinlock") > Suggested-by: Andrey Konovalov > Signed-off-by: Waiman Long > --- > mm/kasan/report.c | 34 +++++++++++++++++++++++++++++++++- > 1 file changed, 33 insertions(+), 1 deletion(-) > > [v4] Use Andrey's suggestion of a kasan_find_vm_area() helper and > update comment and commit log as suggested by Andrey and Sebastian. > > diff --git a/mm/kasan/report.c b/mm/kasan/report.c > index 3fe77a360f1c..8357e1a33699 100644 > --- a/mm/kasan/report.c > +++ b/mm/kasan/report.c > @@ -370,6 +370,36 @@ static inline bool init_task_stack_addr(const void *= addr) > sizeof(init_thread_union.stack)); > } > > +/* > + * This function is invoked with report_lock (a raw_spinlock) held. A > + * PREEMPT_RT kernel cannot call find_vm_area() as it will acquire a sle= eping > + * rt_spinlock. > + * > + * For !RT kernel, the PROVE_RAW_LOCK_NESTING config option will print a > + * lockdep warning for this raw_spinlock -> spinlock dependency. This co= nfig > + * option is enabled by default to ensure better test coverage to expose= this > + * kind of RT kernel problem. This lockdep splat, however, can be suppre= ssed > + * by using DEFINE_WAIT_OVERRIDE_MAP() if it serves a useful purpose and= the > + * invalid PREEMPT_RT case has been taken care of. > + */ > +static inline struct vm_struct *kasan_find_vm_area(void *addr) > +{ > + static DEFINE_WAIT_OVERRIDE_MAP(vmalloc_map, LD_WAIT_SLEEP); > + struct vm_struct *va; > + > + if (IS_ENABLED(CONFIG_PREEMPT_RT)) > + return NULL; > + > + /* > + * Suppress lockdep warning and fetch vmalloc area of the > + * offending address. > + */ > + lock_map_acquire_try(&vmalloc_map); > + va =3D find_vm_area(addr); > + lock_map_release(&vmalloc_map); > + return va; > +} > + > static void print_address_description(void *addr, u8 tag, > struct kasan_report_info *info) > { > @@ -399,7 +429,7 @@ static void print_address_description(void *addr, u8 = tag, > } > > if (is_vmalloc_addr(addr)) { > - struct vm_struct *va =3D find_vm_area(addr); > + struct vm_struct *va =3D kasan_find_vm_area(addr); > > if (va) { > pr_err("The buggy address belongs to the virtual = mapping at\n" > @@ -409,6 +439,8 @@ static void print_address_description(void *addr, u8 = tag, > pr_err("\n"); > > page =3D vmalloc_to_page(addr); > + } else { > + pr_err("The buggy address %px belongs to a vmallo= c virtual mapping\n", addr); > } > } > > -- > 2.48.1 > Reviewed-by: Andrey Konovalov Thank you!