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 BBBE2C4707B for ; Thu, 18 Jan 2024 09:02:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 21CB66B0074; Thu, 18 Jan 2024 04:02:43 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1CC596B0075; Thu, 18 Jan 2024 04:02:43 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0E2D56B007B; Thu, 18 Jan 2024 04:02:43 -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 F2DA06B0074 for ; Thu, 18 Jan 2024 04:02:42 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id C6A5C120A9F for ; Thu, 18 Jan 2024 09:02:42 +0000 (UTC) X-FDA: 81691841364.10.A2F0B94 Received: from mail-qv1-f54.google.com (mail-qv1-f54.google.com [209.85.219.54]) by imf06.hostedemail.com (Postfix) with ESMTP id 202BA180007 for ; Thu, 18 Jan 2024 09:02:40 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=aop3Kq1y; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf06.hostedemail.com: domain of glider@google.com designates 209.85.219.54 as permitted sender) smtp.mailfrom=glider@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1705568561; a=rsa-sha256; cv=none; b=wgf/g935jOWOif1+u24ZgmnmMRieQEdnXDNHb1NPO7xGTRctXOX+wKak2CCNHWi5ESub0m 4vAnhkOkNJXh640LJixwusOC1MG7NF1txqUdCL8EuvDI7HrUpeCYNCMSxwA2pGZNIQP2Zr 8+JSFK0U+2mrZeUvad6BdkyenQQAldU= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=aop3Kq1y; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf06.hostedemail.com: domain of glider@google.com designates 209.85.219.54 as permitted sender) smtp.mailfrom=glider@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1705568561; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=dZx8jkcSyxiY1OJQQRVdDwc9jw/KxeIOYkFsA2FOdyk=; b=G+txSaAdpjuOKPbZQ9gkiL8iYX2CdHkFV/kyu0DZsa/Kn66Ec+mUAjYPUNvoTT1UKRHAhI z8dB9G6FLTbKjhmQz/n8FVsiduCBj/FWdz8eKVHJ6JyOI3bbatwFVfULyeQnWvAl6YN4BZ N/jSA3f2mTGWSOsFoTEa/LkgL/N8YH0= Received: by mail-qv1-f54.google.com with SMTP id 6a1803df08f44-6818f3cf006so1619166d6.2 for ; Thu, 18 Jan 2024 01:02:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1705568560; x=1706173360; darn=kvack.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dZx8jkcSyxiY1OJQQRVdDwc9jw/KxeIOYkFsA2FOdyk=; b=aop3Kq1yvjxc11S+9COt9ytxNChUa/kPLEdH8rq/48IXaZl8eqM6EvgBtdMznNmE+m RtI9vsrKEFjbZa6ED6WOrHExVluHjT9ASrCbKxJqQGv82T/2yCQLNeozYvsGqQk7VFug bPCFerMSdryrxPmvesEBitFQ4rPDWH56caZ4zNN5y96BkAyQg66JTv8GEZUoArRGLxXL MzVEwil2CDURM+TquljVAKITDRNZxS7Ek7byzX/K6uYALeWSkKM4APEm1i0tnyJUUb2u w6f8TMxpN/VPPljZoSCe0MA3+qlP+VC10HWiihJXLTxmS8ysKplL/csjrtsL+qlltLaG Jp9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705568560; x=1706173360; h=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=dZx8jkcSyxiY1OJQQRVdDwc9jw/KxeIOYkFsA2FOdyk=; b=BHWtbmQuXMmF3htbZtc4KyY/oaGKuITSiW5LL2Kj6dAxNp4fVEB0WJ4rSkB26CqtzT nCqpgjOsBejPamxGIygJtiIOf3RUh9sirxKO1IvK0atrmEcD7r1MCERMS/D8gsqrfh3m w+5yhUKPER1PS6O0CzRJ3LcuPaRBON307zW2EfHWVhg64TKy70ul4ffcVOw8q/6JMkU9 4RioBi4dw1HppY/zlp4EJHK6BtkVSr1Gdhss6UQj+c12KbiOU0+/FPBrh6NLc1oY00FM SW8Ge6cnPUxgU5LGxp26GUymdLzh7Qr8NsMWVh0kizOA6x/PK7xkCHcAyaK77z26H/CE VSjQ== X-Gm-Message-State: AOJu0Yzb5tPFeu4dnl5pI3p7nrBTtRrvTwOuHW+AnhzSxiEVYirbYrIE OOETk7+is/P7Ax1rd9U1lg2mxvaKuWtRqjC0oYvE8bb4zzm0VAeJk72yJKg6hZVVrfqUGRecJcI jkq1i+tFShXzNxlrRgvBis/rw6AIIlVBc5Nbp X-Google-Smtp-Source: AGHT+IGzaN1qKPT5YRlCBwEsg7XH4i+PuJyz8L04g9JEpbgJdI9ce77LIl/RZ+4p52Xb99R6mwrrK/ZPB53xiCbcATQ= X-Received: by 2002:ad4:4ee1:0:b0:681:86fe:6fc with SMTP id dv1-20020ad44ee1000000b0068186fe06fcmr477337qvb.116.1705568560115; Thu, 18 Jan 2024 01:02:40 -0800 (PST) MIME-Version: 1.0 References: <1697202267-23600-1-git-send-email-quic_charante@quicinc.com> <20240115184430.2710652-1-glider@google.com> In-Reply-To: From: Alexander Potapenko Date: Thu, 18 Jan 2024 10:01:58 +0100 Message-ID: Subject: Re: [PATCH] mm/sparsemem: fix race in accessing memory_section->usage To: Marco Elver Cc: quic_charante@quicinc.com, akpm@linux-foundation.org, aneesh.kumar@linux.ibm.com, dan.j.williams@intel.com, david@redhat.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mgorman@techsingularity.net, osalvador@suse.de, vbabka@suse.cz, "Paul E. McKenney" , Dmitry Vyukov , kasan-dev@googlegroups.com, Ilya Leoshkevich , Nicholas Miehlbradt , rcu@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 202BA180007 X-Stat-Signature: 1ppkbuj76drc8ok1m9rwnsiwj6xi886u X-HE-Tag: 1705568560-374030 X-HE-Meta: U2FsdGVkX19hPu9jR+6d3Bs5FeTaBZD+cjl4Gf0n2QR/ShubdRvcKqw9OcHvIB5MRibcY5FfDZ2+URSGKDQtRsuCugLjlI8r8ND6yQWs9TpOOE+w2ex6BlWS1c6Lyin+lAJcwZM01BwugoELfMaRpQMXcQRUkoDuyAYbaNVTWnz2mAIhcO96CUNxOeLxgQIzJ/pJhMKqhScWQsEemDuqFq6TEp0RgymqWytZqoargQMQNPvJtdxrn83y7W2pyUCfLRElhPLisjyT43iP+rPRv38dqAU8c21ob4Vkd/IluH75pz5wyXPjV+5kd9AUzZMzEavlW/pJobGziSCzsWnh4tMobmJ0prqP0YlzoPCCO+qq2lsA3CEmXKBJ0E+atJpbqHvOjjO7LCn3EcDSyKhYKXPx0CT3ajyqsD69J9vFRGDaGBl3LqCfb3A6qSMCfxXCQDiG4ZBjPMDiJ7O7oxqQDh5YlEy+bCgx1VuotKsTEYhFzVsrOHHbCtWn/EVqmvJtAQIQ/fRVCGB4FFeuE4NJD+G46xw48Ns8rlIEiyl4qxD0jSB3BvuMOuy4Hkc/YzgmCrsTG9sA8BfKd87lddRxUvj5FQ1BcEizLk5WdskkU+NOEuh/VHDv+LwFPYvpKaD7i+4vPTz9LGllQsVv/GIM6vkCEP4WzHe9Ir9wxvMJTPsiPf+x35mQ8qa1yyaUg5qXe19w0a3TUlC81T7Zb0Rc3r9+g3Us4nnAndzVwJvizVZ0zt1LTuZpD2vFX5Qgy/6zyBwKbap7CZp7jQUKp3cXRrwqMW0s0zSGn4jTzqSxoZiLtMAGe31tXx5B7vRWiZ8I9TYipqNZLdxenoRyuYdVkkzRARMa7FmxEeAjxxIxjmrHfByQH4ujeOw+BTLfmv8rZfo8opTzIq4IJjKQev2FdXTdAcUlcR2nytuA7YTmTyvxuZ87oWBPY5oZTcgXL7mYdml1Oi3qhjHRmG+TgdY vvxIC1Iy uROVXPIxvbLzT+W9e0KpWRSs7fF0aLDXYGo8T5cfxlESk3gjXN7Abx04wxaVfxGF4Dga1Z1q0+xIZ9r8c1NpAs7+O9dUxRgfaApJ9QtF3ttZdbMZWA3XWMHvLswDMMU96F8DRiUjdi3QOgfQega0GsVeh2XZ4LjflYiIGPazeVumhcxdmRHGZLGex7yOrClzqECopBq2MYbIBrj/K1gsnDL/E4yt4w45aBByRU+T6xYsdmnjJJJYRRxvzs1zRY1rmpDz7ctylDTK+/Oe17P8IvhY1CA== 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: List-Subscribe: List-Unsubscribe: > > Hrm, rcu_read_unlock_sched_notrace() can still call > __preempt_schedule_notrace(), which is again instrumented by KMSAN. > > This patch gets me a working kernel: > > diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h > index 4ed33b127821..2d62df462d88 100644 > --- a/include/linux/mmzone.h > +++ b/include/linux/mmzone.h > @@ -2000,6 +2000,7 @@ static inline int pfn_valid(unsigned long pfn) > { > struct mem_section *ms; > int ret; > + unsigned long flags; > > /* > * Ensure the upper PAGE_SHIFT bits are clear in the > @@ -2013,9 +2014,9 @@ static inline int pfn_valid(unsigned long pfn) > if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS) > return 0; > ms = __pfn_to_section(pfn); > - rcu_read_lock(); > + local_irq_save(flags); > if (!valid_section(ms)) { > - rcu_read_unlock(); > + local_irq_restore(flags); > return 0; > } > /* > @@ -2023,7 +2024,7 @@ static inline int pfn_valid(unsigned long pfn) > * the entire section-sized span. > */ > ret = early_section(ms) || pfn_section_valid(ms, pfn); > - rcu_read_unlock(); > + local_irq_restore(flags); > > return ret; > } > > Disabling interrupts is a little heavy handed - it also assumes the > current RCU implementation. There is > preempt_enable_no_resched_notrace(), but that might be worse because it > breaks scheduling guarantees. > > That being said, whatever we do here should be wrapped in some > rcu_read_lock/unlock_() helper. We could as well redefine rcu_read_lock/unlock in mm/kmsan/shadow.c (or the x86-specific KMSAN header, depending on whether people are seeing the problem on s390 and Power) with some header magic. But that's probably more fragile than adding a helper. > > Is there an existing helper we can use? If not, we need a variant that > can be used from extremely constrained contexts that can't even call > into the scheduler. And if we want pfn_valid() to switch to it, it also > should be fast.