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 CB0FDC3ABC3 for ; Mon, 12 May 2025 19:17:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D61856B0083; Mon, 12 May 2025 15:17:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D0E226B0089; Mon, 12 May 2025 15:17:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BD6AD6B008A; Mon, 12 May 2025 15:17:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id A2EEB6B0083 for ; Mon, 12 May 2025 15:17:34 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 9993F16086F for ; Mon, 12 May 2025 19:17:35 +0000 (UTC) X-FDA: 83435214870.15.2B5F4C1 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf29.hostedemail.com (Postfix) with ESMTP id 7DADA120004 for ; Mon, 12 May 2025 19:17:33 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=a9CkMbTE; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf29.hostedemail.com: domain of jkangas@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=jkangas@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1747077453; 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: references:dkim-signature; bh=s/18zIVU9SJCaF8Ai1CFMU44OTCynZeUoKhqvxkl5xg=; b=xELaJbGppJ/l+WixntePC3ATwHVyRks6uPh0c67yGPGHwzJOGEkKqX3XdmxhwF2I/lS9EP fZo3gdcKPm2DHjB4sneE3Yo5QptVHWMQC839rfT+l6nQjtRD2/3D8rnfNrDwcv85W+9kwZ bzM2eKrP7gP+64r3WAG1dLCxZEJs7l0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747077453; a=rsa-sha256; cv=none; b=ggIvp7R3U6tRCZdviLwpsZ38OUbSuzyO/e12y8SsZ/2H50S653RBp7MA4ZZx98x3g/qFCP tLmlieprdHrxmg1KxteGBc3Sr/krnhpZovNuihzWoQV8muaKXnD7GurZl1fonoA5T6hmBs KkZHqzWoEjgWrVFRjoD0eumu73rW2EY= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=a9CkMbTE; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf29.hostedemail.com: domain of jkangas@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=jkangas@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747077452; h=from:from: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; bh=s/18zIVU9SJCaF8Ai1CFMU44OTCynZeUoKhqvxkl5xg=; b=a9CkMbTErAm0dblhq0yJwdWlYTO2MHsE8ODHgSYkvfj8UFWBoMJo2h99KE6BxHm3MVeG52 0ygj2R0HB4VI5uQT7eOfphS+7kSuEjSuYxpsg7IzHfHiJvzsdb50rLkjlO238uNphRcpPl LB9qs4igQe5rmxJ8+nqh840G2WRP/iI= Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-265-diJoqrpwOj-4JsfH4w8Ggg-1; Mon, 12 May 2025 15:17:31 -0400 X-MC-Unique: diJoqrpwOj-4JsfH4w8Ggg-1 X-Mimecast-MFC-AGG-ID: diJoqrpwOj-4JsfH4w8Ggg_1747077451 Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-47693206f16so89622731cf.1 for ; Mon, 12 May 2025 12:17:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747077451; x=1747682251; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=s/18zIVU9SJCaF8Ai1CFMU44OTCynZeUoKhqvxkl5xg=; b=G+RsPFFhVblNacEAoujaW6Dg/dI7/ZdCqKDf4YEB3RzEl6CrMeNmlCNFFbfGhXF+Bu 5IniCKus5ZbPTtc66Ip0/+xj52MZsANOqB4HRnorLwuiGOzAkts4izPNZ2X3zIqTPRTG U/nchXUNUne2rujXSRQaJtfWNwGpQnOV4E9gov3qD2UnSoeV35I7pr8UGTBFT3UVK0eg H3u8mPW0bKxY5GxI5sh2SDMDu7A2VKHB8y+fWj/3E6lO0s/HEHUHXesH0E4FVYObINUG 5W/m8YCNahUepdP7pIxuJexgpVAOrMOScxSKCwus9v2wdJuTRJw2xO9q4R97veA4MEhC 3gqw== X-Forwarded-Encrypted: i=1; AJvYcCU4Lp5WXC7Ca9m1sVlvqWvfH9hPtan1GOBYvuSZzBS2Gw9TvwCNtUYOe1RB1tonCXPLQkoUInlDsA==@kvack.org X-Gm-Message-State: AOJu0YwgzU7UfxNMqXUlROmxXwsmgfzWt8dpXpu2ykIbfJgpbccRmHiv XrTskkjxiXTPAeBf9BRAdkTmaWSMBKEC50+f/+YyPy1DfzPjZ9KekXzlXuytfeA4h4HbU92X0kR pUxoeAZfpfLo6ciy6HwSi/vkqX/KaRsuYuFnnW1WBHs4rEuql X-Gm-Gg: ASbGncvDmxCF//1a64Qh1BBoAcKZlnn+ILCYU+vTyeE5RWgbDKL4vr4sMm81d6UZOZz 2bopuyQgqDK2GcGbdiP8dMEQGUnc85S29KfNTwKYnrN7m77V2b4HcZ2JpCvdcMbA54CFeABoN5p sGRiS7jTmuCjuXIx6x/vWOB1joTs0tXmncgEeTeqNqTWQPsCRLftbuNI3v1ktuVdL9o8a6uVnss x/c8PtwfO49sSXGHNOT3zCnYkmi5KS80WaaH0ZVY7L4/IEb+e5rIAQe5yncStIQAI+LWK+yfRte IheRj+Tyoi7gDpsmQlmS2JWO+qvb7c9q1VYPZJODQbs= X-Received: by 2002:ac8:5a4b:0:b0:48e:1c13:ecaf with SMTP id d75a77b69052e-4945273c570mr229772431cf.16.1747077451381; Mon, 12 May 2025 12:17:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF+7q4UW257no1ZfUNsmnYKJakieEg/UoQSyIMxIM5MObxjq90atPrhvRnYakQEeO5zdg2D9g== X-Received: by 2002:ac8:5a4b:0:b0:48e:1c13:ecaf with SMTP id d75a77b69052e-4945273c570mr229770951cf.16.1747077449828; Mon, 12 May 2025 12:17:29 -0700 (PDT) Received: from jkangas-thinkpadp1gen3.rmtuswa.csb ([2601:1c2:4301:5e20:98fe:4ecb:4f14:576b]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-494524bbc53sm55635321cf.47.2025.05.12.12.17.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 May 2025 12:17:29 -0700 (PDT) From: Jared Kangas To: willy@infradead.org, akpm@linux-foundation.org Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Jared Kangas Subject: [PATCH] XArray: fix kmemleak false positive in xas_shrink() Date: Mon, 12 May 2025 12:17:07 -0700 Message-ID: <20250512191707.245153-1-jkangas@redhat.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: jaOzeuY0RK5kj3g1E5EoyH951k7Ogk6NSNpb7mhFMQM_1747077451 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Stat-Signature: 6tzr8k4yijuse7zfbmjmahk5881oqwrr X-Rspam-User: X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 7DADA120004 X-HE-Tag: 1747077453-924980 X-HE-Meta: U2FsdGVkX18ELc/+8j0vvZScrUS+ZIc6Vz/cm1PkQuLjrKoZJ29+ldOy/tLCPD7outOB1MPz/50b7Wfgo1cSZ/8xWooVBxlksFh6q7h2OHf6moTLCov0xEu19HTf4dfyGhHM4TixhS+DZkyQvvJc5Juwuer04iaDu0xLvxYlLeuHFhMS3ddZLuxnOEuX008261Dxyg+n1U/0d7ZwmjwREMWa3kVilGLixPPWVoEmlJVs+aezXtYyaGHlyoY6axzFPRhp0/eidzsOBGzfjW7/44Y2gOdO0EzSCj6L3yCsh3jaISeCF/kPnBJ+gLZ+0zgSw7XmZAizDx3Gdse/TI/pOUWWnJqmwAPCIq1C98+34mILLj1fq/zCZ6SeIfNqgH+Oe9yqC9SnEmBCvHH4CpCIh2qLjaEt/STfBtta3Iazngz9frUirY9Hv59q2RK942IiyTOKZeznPtPZXEV4DFgSwhUFe3P3+1d+PzHGCgGAjKNV9ztrZvqDGLlc+AP0RVVYvppC8Z4Yk0TN97vghrWbqw003D0Z38C8SZSB/e5tF4H5DI3XN1EV/Sl1LqdnmlCjHhd96F7CHCO7U8DMe84u+8LQC6ydzjuQSxaEbOOAkLIWP0eBLNiTLO4uTFlsQlqa4jWDNsqMd2I+JwRdPDWFhOPjkX50ZJNdgWnuYDAqaUVwQCkDCkGN7/d8R4re246z9HTyNU4db5vR4rkY6KkXX6PAy4sjvggmQ1NuTP6IlvzAXHF4CtZAVeqPL1Xe93AmXu0GTi7yU2XZgHWPNGTMVY6anLV0phD0xOFQAy2GEW6PEWEKhwAGQJhv41JLB/j4tzd7g6GrGhc0djQ51zrLlHISd1fRVQ3ARwbxXVNZRszb2XcgNV6BFiVPkkqan0lJU7wOB1lDPoifysyp2l4FhuAY86KDQR5o3h0QQ3Ii6JS7PUIxXTPQT+/cIiR0JryEt7/Bvunf9BKdPraUlvp Uu1yXImb 8WPEtuMUOBS/ge7NLdC0e7YNVPW8PLC6NA9Kmny1vA985EXZdzP5/D8qgaFdxoOu6H3AhQoqMkuMHThZd8J+MSQpNVhvCdmaFAFPiPvCbIpyk+61AY7zH+0qX0ZR69wf98MjZm9Vb428VsSYitxFgx/2qVxcj5jjK4SYRjUAygQUUOfMV/+PIjAwWucCIyyxKGoH76gV+k36tmaQs2cYkU2f5OtkEgHOqj5F1G1nhvMRcuvlQ1gmZugvU4tXYGn42vi2piMDOfEJSSJ6QCyZzz+wlQzk0foQcVdAnPI5Q6u9B4Ic+gCatOuJPmoTmI7QXmskDqRyEzZhSptZQnh+jss5xDJqP9nfioN4zL/VKa7drdZxbZeOXPcWIlyoQTcJg8XqcKc17e8syGBc/XuyT2K/LPxhilPndPYtYwaHSESTbUHUnI8thCkWnNap7xgPPafS0IoxqQd7B+2g= 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: Kmemleak periodically produces a false positive report that resembles the following: unreferenced object 0xffff0000c105ed08 (size 576): comm "swapper/0", pid 1, jiffies 4294937478 hex dump (first 32 bytes): 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ d8 e7 0a 8b 00 80 ff ff 20 ed 05 c1 00 00 ff ff ........ ....... backtrace (crc 69e99671): kmemleak_alloc+0xb4/0xc4 kmem_cache_alloc_lru+0x1f0/0x244 xas_alloc+0x2a0/0x3a0 xas_expand.constprop.0+0x144/0x4dc xas_create+0x2b0/0x484 xas_store+0x60/0xa00 __xa_alloc+0x194/0x280 __xa_alloc_cyclic+0x104/0x2e0 dev_index_reserve+0xd8/0x18c register_netdevice+0x5e8/0xf90 register_netdev+0x28/0x50 loopback_net_init+0x68/0x114 ops_init+0x90/0x2c0 register_pernet_operations+0x20c/0x554 register_pernet_device+0x3c/0x8c net_dev_init+0x5cc/0x7d8 This transient leak can be traced to xas_shrink(): when the xarray's head is reassigned, kmemleak may have already started scanning the xarray. When this happens, if kmemleak fails to scan the new xa_head before it moves, kmemleak will see it as a leak until the xarray is scanned again. The report can be reproduced by running the xdp_bonding BPF selftest, although it doesn't appear consistently due to the bug's transience. In my testing, the following script has reliably triggered the report in under an hour on a debug kernel with kmemleak enabled, where KSELFTESTS is set to the install path for the kernel selftests: #!/bin/sh set -eu echo 1 >/sys/module/kmemleak/parameters/verbose echo scan=1 >/sys/kernel/debug/kmemleak while :; do $KSELFTESTS/bpf/test_progs -t xdp_bonding done To prevent this false positive report, mark the new xa_head in xas_shrink() as a transient leak. Signed-off-by: Jared Kangas --- lib/xarray.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/xarray.c b/lib/xarray.c index 9644b18af18d1..51314fa157b31 100644 --- a/lib/xarray.c +++ b/lib/xarray.c @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -476,6 +477,7 @@ static void xas_shrink(struct xa_state *xas) break; node = xa_to_node(entry); node->parent = NULL; + kmemleak_transient_leak(node); } } -- 2.49.0