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 D5990C02198 for ; Wed, 12 Feb 2025 17:52:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6C1D86B0095; Wed, 12 Feb 2025 12:52:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6496E6B0098; Wed, 12 Feb 2025 12:52:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 49C426B009A; Wed, 12 Feb 2025 12:52:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 2491C6B0095 for ; Wed, 12 Feb 2025 12:52:49 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id BBB59140369 for ; Wed, 12 Feb 2025 17:52:48 +0000 (UTC) X-FDA: 83112038016.04.423F97D Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by imf10.hostedemail.com (Postfix) with ESMTP id 4A415C000D for ; Wed, 12 Feb 2025 17:52:45 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=bZMdrn90; spf=pass (imf10.hostedemail.com: domain of ryabinin.a.a@gmail.com designates 209.85.208.171 as permitted sender) smtp.mailfrom=ryabinin.a.a@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739382766; 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=C/kS06FLerC2Af3s6b6Rf5nvMZaz+z4sBVLyAweX+ok=; b=CAJy5//hN5745qO+LULcIJilF7jyKGFpXWpYyNHyfTUwJPgTvJSxWvZAbW67VrlYYKYqjq 4cQw5aeDhAHrctEDTuPSEkGmwd7nChVRrpLO8F29HclkGfVml+CaLeE7KSvZlUo8SXOpmY jPhkXYDdby/EtLI6ODWvC09Xh2N9X/I= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=bZMdrn90; spf=pass (imf10.hostedemail.com: domain of ryabinin.a.a@gmail.com designates 209.85.208.171 as permitted sender) smtp.mailfrom=ryabinin.a.a@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739382766; a=rsa-sha256; cv=none; b=v7ib+mvbfcbLVeg74WznfO78S21dTOnsKev+rtKM2DNmb8V92Bug6U9tKqhTc8TosxW3in EGBDYo2WXLhYorZ3JKnUkwvLJhCoUniVa7RS+THcoRG93z/wzdp5qItOoY3tytB4UdLmKP XsFqDlmG3rVpyNh/kBK3PRBv78lgHzU= Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-308fa10058bso13381fa.0 for ; Wed, 12 Feb 2025 09:52:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739382764; x=1739987564; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=C/kS06FLerC2Af3s6b6Rf5nvMZaz+z4sBVLyAweX+ok=; b=bZMdrn90fFZHoDmp2m8sn/Qh++EezJZnW5OqZUwEtFW7ulBOI5q0+3xmSNrDOKP8R6 s7wk9IfdKqctpgcjp4G/HZgF03h599HVfCToj9ZrapAZmT/yHB3i9c8i0BPW2W5y2Dhf aUbhCzQRacy5rqhSffM9hZf4b0ZAYniNR71wAvhSoQtMzs2ivUx5lPJ9/5qt4QgkxLZ6 KP8InbPX++OAPfYaGHi0Tkm5n1QkbXCv71GOi6r5cRtKaLprm2lWcvnkAcSRAtREX4vz z8aFLfrVZUFrk1EJreCCoL1NUx+5IavIH8rucRGxHEAgsZeUSEglCXXY58HMgS4VO10R gSWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739382764; x=1739987564; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=C/kS06FLerC2Af3s6b6Rf5nvMZaz+z4sBVLyAweX+ok=; b=QvIHHbLMoNi2VIlZOI2IDrA6Vof9Ys4JROL3a6ocH7/z5sYdz+iaRF1L85iG/BUJIu eKt1xYpmdKyZaKG+H2xLgERG4UrxthsSYiMjTKmXPY543TjaUHVeivfeVXMO3YPVEdIS 8tl29DKN8i1AFYclo1MUemBMQIIAgncx38FKLIX1ihNbraCrMBhncSUDFtKavYY0HFWu 1tii5D/v11IrUlTnrllMP+INljWAFGku/0V8U3ba/c3tRM7Y+x5HbNYKovAfl8SD8xFA +J9WFxbuAkkdpuwXS0uh+JsGEwKvcAGRDMZesSDd47iZwUsGK1Sj/g5kLTgGbXLN7mhb 6L7g== X-Forwarded-Encrypted: i=1; AJvYcCXONiVC/C9YwHXdeIO5YmnYUb61KLBbAw29/F9xzhAxqdECuTMvr2iIRy/s8OG/+KIqR9VftIM4lg==@kvack.org X-Gm-Message-State: AOJu0YwsQmkueoSPgiaczI+rWGaROWUn0sIPYbr45rw17PXkZmH2CDd9 yPIaByJmk+XEwpk/0SzBFD0RW/7Urh/fbBdOg+alAFf4w4ctnwcy X-Gm-Gg: ASbGncsDIyPxCB/tQo0p5bAuHn5Az3/YYJ4nQbDz4bW45aA3u+REaHYFJdzsHJUSsAp 4rKbQKPRHIlgwqf+UB1IPD5B9IGEraDEGGiN2/iIf0bf0ojP6CAFKn4v+bOB0W5e0vLtEK+FtgO X+m8L+uiS4mVNZPjk4djnolJAqGDunEgR1OR4WaomCz8X9KePSeLFH9/ArMlMZmJJw6ENoR8Uv3 rdLaNt2pKQBqZc5I4WrTFW6CJrpzFgCq1FvgdSCjTcegjzy3zPFBhNVD1t/6Vr7r9U/9AGybADg APp5B/Vzj/TsSoRrtVuZLA== X-Google-Smtp-Source: AGHT+IGhAf9G/ZHnuARYEZ7FvPVEQiQFkKF3QjpnfizbwNgmuLoZolSmQ9I1VNR6kpuAh/gwQv5YZQ== X-Received: by 2002:a05:651c:504:b0:302:3356:54e2 with SMTP id 38308e7fff4ca-30904664d33mr5547561fa.10.1739382763893; Wed, 12 Feb 2025 09:52:43 -0800 (PST) Received: from [10.214.35.248] ([80.93.240.68]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-308d9e1fdfcsm15669701fa.31.2025.02.12.09.52.42 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Feb 2025 09:52:43 -0800 (PST) Message-ID: Date: Wed, 12 Feb 2025 18:52:39 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] kasan: Don't call find_vm_area() in RT kernel To: Waiman Long Cc: Alexander Potapenko , Andrey Konovalov , 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 References: <20250211160750.1301353-1-longman@redhat.com> Content-Language: en-US From: Andrey Ryabinin In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: 4A415C000D X-Stat-Signature: 6tgmtro3tr9mxx3wus1x97gja8aae9by X-Rspamd-Server: rspam03 X-HE-Tag: 1739382765-674127 X-HE-Meta: U2FsdGVkX191HJJuU/qbkqz2aINSeOk6SbDO3CvBYyfZsFNFSktQvdcardwJeBUaNi1BJfnxE8QA2CJoX4lNcknNgZXXCAErO4flrc4w5WhMWUnHIjnp0Ias7PWHl9COLJWQuxf5/dZIqklcbxV46Yx0nMEWRLsUXYLSV6iEgGmIo8IypK+uAvY10lLJefOeyRfkFj00IyWOem+8C+wR1BEcaMdvPJ9WpFWTF94Jj+y18qiEuARox6skDdCcfgwYZNSUG7q9iTxAzw1V/SuUW1IKmEcUxdEBKKd+0yrG1owRK66U6QTILUfzjWjLeUpuYD+TEQbZyIhsSBEv4fI0kQskdXMXrnz1aE5Ls9WJJoMTuHPj30ZX2YrLDhjg25m8GsHy2Ea6R6f451M72DSU0n5tupq81/Tjq6OeCTh1KsGkLt8Q4Gjt9P5W1+2Eg87PS+ZF5IhJGhnZedjEzbojwilkrWxtL6FQAmzBfR6V8P5a2t38BtC0gyYq25tKA8lMGt8nMys1m3dtFuGs0ToC6r2EltXVFqyZMZCMBujlr+LIOVxkeonJb41lXphVhHzXGubFVoMOFu5GqODGWHfi0v23Sx93qiTTBV7hlAWQewsSCddaO4GgANTAhDfIVc2Pz4LY6+Hp7x2pdd8ILmB3VOQyG6vFHSiqK4SsLnPRJuN+sHSapEyJYcYWIveVUYDda0O1ivrmca00SFIIfwkqFzBTNJiQdUeqdFZbjuoIQblMduDLftMCoWb/9JUFcibeVKIqMHkzj6a3yBY3VzRUP8NaKf2QtubWIWO3o285I+bq2oSyDXWCmRoLqmeArdTgFNVAbu1oKyeMmPEbJlsY00uXLlub/7IGPOoAjfTDDX/Bfdhwuoi3I/W0DQwkWaGZ1Rwek+uM8IMIXDsQ70DIeB9OWUr4xjr2wk+MTrlVi1ide213V0GbdmiQYNss2E87Cc46wWKmI2hXUal3rZ6 HOg0p5lj bkpoTXugDFO0aOX3FU9l/85mUQ7AU9IkgtVzq4J7Jbwlg8KrEi/LXewAgf0m+URqcGmHmcrAJoBdUz2fywq7XAVOTvNTJE7BZBcYzZY7KL/zjHzL1tKDweKikzLBP36LisCj8QZvMwhhBhLAzJPajWonbfitMmJO7XLwDPlq27PRNXVl2UVykU2GToTuV2i8/w5kbYb5GyaYu3OsiJT43HQU2iYdDcRhnLuZEbh5+viHJ4haEN7hpTrxl1B+hOdX1kszomHgUgonpxJ1I3rO713e6wnjrdzJwXNyaxRkvYe42IhASnuUo96f1+7VQ6EQaOVlOi/7sTr4qgI7JsPQub5dku1bQ6keBNDl9VEXOvuGNYoNrarXsbxrXutlwIv9uEYpyzABhMrL0EVNTd429HsJY+D1MRNLZpWxurkJgkxlvPFRu3WdeTplx9f2xiQK4IwFd0Oct7ffq/zsW+iHRPmjqoE/shfcMvZb8LcpjUyxBYzF/uPgFBx1JZ1TPZduDBsGSAvgAPJVvNiwhkPpN8OLDow== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000009, 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 2/12/25 2:34 PM, Waiman Long wrote: > > On 2/12/25 6:59 AM, Andrey Ryabinin wrote: >> On Tue, Feb 11, 2025 at 5:08 PM Waiman Long wrote: >>> diff --git a/mm/kasan/report.c b/mm/kasan/report.c >>> index 3fe77a360f1c..e1ee687966aa 100644 >>> --- a/mm/kasan/report.c >>> +++ b/mm/kasan/report.c >>> @@ -398,9 +398,20 @@ static void print_address_description(void *addr, u8 tag, >>>                  pr_err("\n"); >>>          } >>> >>> -       if (is_vmalloc_addr(addr)) { >>> -               struct vm_struct *va = find_vm_area(addr); >>> +       if (!is_vmalloc_addr(addr)) >>> +               goto print_page; >>> >>> +       /* >>> +        * RT kernel cannot call find_vm_area() in atomic context. >>> +        * For !RT kernel, prevent spinlock_t inside raw_spinlock_t warning >>> +        * by raising wait-type to WAIT_SLEEP. >>> +        */ >>> +       if (!IS_ENABLED(CONFIG_PREEMPT_RT)) { >>> +               static DEFINE_WAIT_OVERRIDE_MAP(vmalloc_map, LD_WAIT_SLEEP); >>> +               struct vm_struct *va; >>> + >>> +               lock_map_acquire_try(&vmalloc_map); >>> +               va = find_vm_area(addr); >> Can we hide all this logic behind some function like >> kasan_find_vm_area() which would return NULL for -rt? > Sure. We can certainly do that. >> >>>                  if (va) { >>>                          pr_err("The buggy address belongs to the virtual mapping at\n" >>>                                 " [%px, %px) created by:\n" >>> @@ -410,8 +421,13 @@ static void print_address_description(void *addr, u8 tag, >>> >>>                          page = vmalloc_to_page(addr); >> Or does vmalloc_to_page() secretly take  some lock somewhere so we >> need to guard it with this 'vmalloc_map' too? >> So my suggestion above wouldn't be enough, if that's the case. > > AFAICS, vmalloc_to_page() doesn't seem to take any lock.  Even if it takes another spinlock, it will still be under the vmalloc_map protection until lock_map_release() is called. > I meant to do something like bellow, which would leave vmalloc_to_page() out of vmalloc_map scope. That's why I raised this question. --- mm/kasan/report.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/mm/kasan/report.c b/mm/kasan/report.c index 3fe77a360f1c..f3683215f4ca 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -370,6 +370,20 @@ static inline bool init_task_stack_addr(const void *addr) sizeof(init_thread_union.stack)); } +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; + + lock_map_acquire_try(&vmalloc_map); + va = 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,8 +413,7 @@ static void print_address_description(void *addr, u8 tag, } if (is_vmalloc_addr(addr)) { - struct vm_struct *va = find_vm_area(addr); - + struct vm_area *va = kasan_find_vm_area(addr); if (va) { pr_err("The buggy address belongs to the virtual mapping at\n" " [%px, %px) created by:\n" -- 2.45.3