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 CDAC7C48260 for ; Wed, 24 Jan 2024 17:15:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 481C78D0003; Wed, 24 Jan 2024 12:15:47 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 432AC8D0001; Wed, 24 Jan 2024 12:15:47 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2AB528D0003; Wed, 24 Jan 2024 12:15:47 -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 0D4F18D0001 for ; Wed, 24 Jan 2024 12:15:47 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id A6DDFA0CE1 for ; Wed, 24 Jan 2024 17:15:46 +0000 (UTC) X-FDA: 81714856692.30.37355AE Received: from mail-ua1-f49.google.com (mail-ua1-f49.google.com [209.85.222.49]) by imf27.hostedemail.com (Postfix) with ESMTP id E386440014 for ; Wed, 24 Jan 2024 17:15:43 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="Qgq/2oQs"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf27.hostedemail.com: domain of elver@google.com designates 209.85.222.49 as permitted sender) smtp.mailfrom=elver@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1706116544; a=rsa-sha256; cv=none; b=KC18L3LmJUaryAJ64Xeusn04f8h7zG3iKc6akxy1ouaSeCl+t70Z0kpjUDxBUlm0UemP0l c5FZ8ns8f1JElS/jTh/DMexFzIqT0kpxUcu3ldQd2I4qVP1fyW3nCjp+jziXJCpP+zSLJH GzsBPq7uRDBXITYF1gbO9WeR13jiBo8= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b="Qgq/2oQs"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf27.hostedemail.com: domain of elver@google.com designates 209.85.222.49 as permitted sender) smtp.mailfrom=elver@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1706116544; 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=CBltU6iTnXDDudf22oqs+fdl0wSad9suT+55PGOStXc=; b=5OsC0Wy9x+iDZ2DhJggUSTga81MXdlxtrJFFKyT7Ty5qMwaEVkVVRLsZspu+YUfRBIYF1V Zh0yuae8ROZR4xK7/AfZjkA74RKmK9HMxqjuLnLTIxdDYRwzQ83zZpEsZpLFviqhktA57y ZZKBYEG9F1mx62D6eiGCmI2zYuHwUns= Received: by mail-ua1-f49.google.com with SMTP id a1e0cc1a2514c-7cbe98278f8so1867715241.1 for ; Wed, 24 Jan 2024 09:15:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706116543; x=1706721343; 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=CBltU6iTnXDDudf22oqs+fdl0wSad9suT+55PGOStXc=; b=Qgq/2oQsLluIKxBT6Ufo7zq9bE27v36JpAYYGEMzsZWFAr3tMjCzkL2yu2jr7FevzR 2V/YX1CuVtOEwUGLCXWBhDM4DMvJlffoQJdsqs5Fiw7ttIdMDlzHLGEROXb1ScXRt7s5 ngf1HfPsboc4GeYigV0HK/ZkbWdnr/zIPWpoZ7vOieEQrOVSDPKRMGBSz1Rq6qfYd0Xd Zm7WY8dqNvwVBODgYbZjFVaWCzCN7JeYD1IMBffcdkP/QwDpVvMuvr+73GlhNzEBTb08 SYD9l/nLY2/S2oDtxrhdZO5/sMvqmrbv+hd+xCQydYLZQAju1JMeZjTq3IKHnmNTPUDF HGng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706116543; x=1706721343; 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=CBltU6iTnXDDudf22oqs+fdl0wSad9suT+55PGOStXc=; b=ZoZlDpZ/SNyKdLSPRd1alob5wkvFPEwrFdeJF6dldcIN/AkgFgJrtVkw38aUBRalGZ LjYdz2PQysm4DFhcsmbanYPSYit1eQE1f8B6ENRQ4qs1WzOc1oPtVIPJxwIfNL15DZlX kVeN2ZjESMiq4Sy5mzWxqnncTgpNRTpLgs6NSz/x7RbW5/y5I/z26BusWyHV42T5UXB1 5UFbqPJp7XnzZzCLsQ/ce86H6vX7Ofb61+7b6YUlJ02VcZX9Oj3mifkmhKNJYNOtZMZP 8bC5uldFlIVAFXfMJSoRYQiqraJp2g0SjdVp2p/ikTyNhJwZVtSx6OkVrydgAc1bcTOi x4OQ== X-Gm-Message-State: AOJu0Yw24j8PDMBKvrNJAA1k8S6watgpnzM5TeM1Y4hCXO9wTscgsuYS Qx7PEwleHrA42ct9JTVy4yAivunzcKPo5KWs/Zm7D7ctqWo6KFNqlHFs+n6I8Qna1wYrVyFhWwv zEvdL9wI2J6yGPxmVO6u1dSgSFp4g4ZsY2TsP X-Google-Smtp-Source: AGHT+IHXa1B91nQv5quzIFRRmEI+jn6X4HE0E9upQHh7HSHIAVIGfrH1VLoqq6fnvybWVIGkXPToihp/9GWlCaOxZSc= X-Received: by 2002:a05:6122:181c:b0:4bd:5537:c9bd with SMTP id ay28-20020a056122181c00b004bd5537c9bdmr1784548vkb.12.1706116542805; Wed, 24 Jan 2024 09:15:42 -0800 (PST) MIME-Version: 1.0 References: <20240124164211.1141742-1-glider@google.com> In-Reply-To: <20240124164211.1141742-1-glider@google.com> From: Marco Elver Date: Wed, 24 Jan 2024 18:15:04 +0100 Message-ID: Subject: Re: [PATCH] mm: kmsan: remove runtime checks from kmsan_unpoison_memory() To: Alexander Potapenko Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, kasan-dev@googlegroups.com, Dmitry Vyukov , Ilya Leoshkevich , Nicholas Miehlbradt Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: E386440014 X-Stat-Signature: hd38g94cw16e9jr93r9e6keppzfpniuz X-HE-Tag: 1706116543-500133 X-HE-Meta: U2FsdGVkX1/wyY0Moskp/BcWBCrqg73oQo0gLiFD7wcHmIps0IFE49VRIfeDD+sWHWO3t/pVsqU8GV1Sa38FJJr/B7840DCc8JiNOcEnEeBUAh3zMhAAynI9v3Q6JmWluh6eYq4WiRLLN/nNI5CGzD2yDFi6MCdTWprIppOty6xpLFomBDQd7x3ZyduMekFfQ4/Uf2W2MnybloTTeXzqaHYtxBU0HEvHfi/pKUE5ZCiwWdAFqphQRNL0iAunYOwoXvhqGXHtCFSvRQiWp2OVlGxFSGH1SkJE2K5wSdtTIAeMmgLqaiA0QPGiTJZzV4qX50n2Ap14kmP1SNl4w+9kUJSlf/R0xV1Y1+O/SaBwO+pvm14ZqRwATAOBWiTfZFZNe6M/AjPLa+9NcYa2vteEn2ztMx28Hjthff7E93ZGxU4iK5vYOES6HsQmLyeTuSR0ndWjv88N3jrbHzEvp8Xv6XPD2qUzHv/x9NQ0YMMwzpk8i/Q4xeGm/x3wySDoJEB0G4ZG3Qz3g4qPqgw/u74mBNoikaZG7NtMQ3Yt9jSXlVy1f2c14/stz7jI5/uqrVxVRSBdwQvemJLYZu5rubTW3HxxSYwT6FOT81kNbggeR/pNpfYou10IFC541gTeOf/ztAbv5/vMMoG1UIhZcCzkd9AE/g+CTz/i37psrI46+US52Ab8GQ6qWX41jdY7byk3tON9PxdmvmE5NNCDxXicCP9lR1OYXB6PamKrlX+qUQCHaMBBZGlfc6U/ovfpoO8pmrWhuhaVwZz2JtR/ii1GikWuz0y8n2wYUjkcBtOV4t02G4Z/p62TIJus+nOnBITA8gC7YdFpHAiKQnO2OQ4jKUH5LRljVFUoqiRNyOAOJE8bQ4VNxss8v7SrYKVXm76A07VoUf3UQIOV2dbgVhgh++uiSnyv2KFF57xlcoXKO+sV/rwlLIbfpJkPok+KKYBh2AU1sFtLmo6bg9IFExB NPIN6+dq pPcEr/kkhaazwFYEs9YGeb+zGh0e4mDcaGdW8DHTDpNuumxbOpcZItFKNZGkTPJdwnc02lZ1KQgQkfESnhMf3NdIcexUFtf4NXcBdWbDkqzkJgUpdaPRGg2p31MyN2iCIRDClVcjj2Bfb1oQFAtiEIgYzgA52Hi6xhbavLfyIiTwnniByvnrQtajNk9mLesBDzHeiB2ZgpdRJxCRbOj0YGj7os4E2WukrohcneS4gYyAK3pTnDSVMIB3Y5t1H+Hv3TuOryg7RMqYRr+i8IKyUG05yImxt0OOF0pk5S/9V//KRlenT4XEwG4SVceWXh6QY/xzgjC3QOcYciZ/mFEFHzHuxD+1xkO3YMmr893Pabo60yOj6lnjDiMtpeg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000014, 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 Wed, 24 Jan 2024 at 17:42, 'Alexander Potapenko' via kasan-dev wrote: > > Similarly to what's been done in commit ff444efbbb9be ("kmsan: allow > using __msan_instrument_asm_store() inside runtime"), it should be safe > to call kmsan_unpoison_memory() from within the runtime, as it does not > allocate memory or take locks. Remove the redundant runtime checks. > > This should fix false positives seen with CONFIG_DEBUG_LIST=y when > the non-instrumented lib/stackdepot.c failed to unpoison the memory > chunks later checked by the instrumented lib/list_debug.c > > Also replace the implementation of kmsan_unpoison_entry_regs() with > a call to kmsan_unpoison_memory(). > > Signed-off-by: Alexander Potapenko > Cc: Marco Elver > Cc: Dmitry Vyukov > Cc: Ilya Leoshkevich > Cc: Nicholas Miehlbradt Tested-by: Marco Elver Nice - this fixes the false positives I've seen in testing the new stack depot changes. But I think this version of the patch wasn't compile-tested, see below. > --- > mm/kmsan/hooks.c | 36 +++++++++++++----------------------- > 1 file changed, 13 insertions(+), 23 deletions(-) > > diff --git a/mm/kmsan/hooks.c b/mm/kmsan/hooks.c > index 5d6e2dee5692a..8a990cbf6d670 100644 > --- a/mm/kmsan/hooks.c > +++ b/mm/kmsan/hooks.c > @@ -359,6 +359,12 @@ void kmsan_handle_dma_sg(struct scatterlist *sg, int nents, > } > > /* Functions from kmsan-checks.h follow. */ > + > +/* > + * To create an origin, kmsan_poison_memory() unwinds the stacks and stores it > + * into the stack depot. This may cause deadlocks if done from within KMSAN > + * runtime, therefore we bail out if kmsan_in_runtime(). > + */ > void kmsan_poison_memory(const void *address, size_t size, gfp_t flags) > { > if (!kmsan_enabled || kmsan_in_runtime()) > @@ -371,47 +377,31 @@ void kmsan_poison_memory(const void *address, size_t size, gfp_t flags) > } > EXPORT_SYMBOL(kmsan_poison_memory); > > +/* > + * Unlike kmsan_poison_memory(), this function can be used from within KMSAN > + * runtime, because it does not trigger allocations or call instrumented code. > + */ > void kmsan_unpoison_memory(const void *address, size_t size) > { > unsigned long ua_flags; > > - if (!kmsan_enabled || kmsan_in_runtime()) > + if (!kmsan_enabled) > return; > > ua_flags = user_access_save(); > - kmsan_enter_runtime(); > /* The users may want to poison/unpoison random memory. */ > kmsan_internal_unpoison_memory((void *)address, size, > KMSAN_POISON_NOCHECK); > - kmsan_leave_runtime(); > user_access_restore(ua_flags); > } > EXPORT_SYMBOL(kmsan_unpoison_memory); > > /* > - * Version of kmsan_unpoison_memory() that can be called from within the KMSAN > - * runtime. > - * > - * Non-instrumented IRQ entry functions receive struct pt_regs from assembly > - * code. Those regs need to be unpoisoned, otherwise using them will result in > - * false positives. > - * Using kmsan_unpoison_memory() is not an option in entry code, because the > - * return value of in_task() is inconsistent - as a result, certain calls to > - * kmsan_unpoison_memory() are ignored. kmsan_unpoison_entry_regs() ensures that > - * the registers are unpoisoned even if kmsan_in_runtime() is true in the early > - * entry code. > + * Version of kmsan_unpoison_memory() called from IRQ entry functions. > */ > void kmsan_unpoison_entry_regs(const struct pt_regs *regs) > { > - unsigned long ua_flags; > - > - if (!kmsan_enabled) > - return; > - > - ua_flags = user_access_save(); > - kmsan_internal_unpoison_memory((void *)regs, sizeof(*regs), > - KMSAN_POISON_NOCHECK); > - user_access_restore(ua_flags); > + kmsan_unpoison_memory((void *)regs, sizeof(*regs); missing ')', probably: + kmsan_unpoison_memory((void *)regs, sizeof(*regs));