Received: by 2002:a05:6358:111d:b0:dc:6189:e246 with SMTP id f29csp1674086rwi; Thu, 3 Nov 2022 07:55:04 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7R8ZHL7m6Q43QJ6DHFybeYYPwSZ+1l2EfQPaingiLFHlXaKEVLRfPAeTUnNSXi44XjJWzL X-Received: by 2002:a17:907:a059:b0:7a5:587d:d315 with SMTP id gz25-20020a170907a05900b007a5587dd315mr29513327ejc.631.1667487304258; Thu, 03 Nov 2022 07:55:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667487304; cv=none; d=google.com; s=arc-20160816; b=xC+013NJoO/Py6KOa8by+byC+dJHQoy02MeOoxQe7XvHmPGMuzUW/gP/KyLqC53sET dQgsWFd+804hHFWB67LVhMWxo98nIYsYA+F7m0yXefDqTPXiMeS5r656QwRaaWYEzAhz 4lbvNAM3wtEuP8AQ/ZUhQA5bvZ58sqga1G9jB9rXvk15TtYuPk937VlUWMectJzkVHtT wMO2vwCy69avjRTwJSeojS4j/bzyzomCDb2stz2LZ3SyUZLL265N/ITnHgiX8GkS0DJg g9xZa7n8QL4GTGHYV/Fsvtqs9fP+EGaQr315I0cIKFStM0VyrNduj55P4v/wotfnqvkD qdmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=SGnUSCPqCRbqwfTPIsUS28tudEAjZuU81okBvbtR/vY=; b=Pj0sKM5fRmZqaX4kVNHyksZIWQFpDrgV8ZLdnUJQ7yfbYDzywBhtEde9uCe0oFWruF uJaZCX4XSHZ715LBRI8p+qIHzln0a6midhiRTAlr+Zrl0bJbxPee2SruWj7TvQI49Tbj 9PhJv9LVj505Y00sckHcHvSaqqBIZzKhSVYjQ7/KaLns6iRiXwQqb0D9eWeVkLpcn3zT i0r49JbQ7bf7dMJqWDjeHsD7+DmL0Citfx6nthMeug29Jibak3GWr2p7TpmKdY+yXtVP CCTH91RRRoflbMkISpk8LnRYuTwQrPJdqp+hOp1w+ims5MWP8hkwtT9Yxf2gizZkFDuz QCwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="N4Ta5MP/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f15-20020a0564021e8f00b0046453c385e4si440445edf.365.2022.11.03.07.54.39; Thu, 03 Nov 2022 07:55:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="N4Ta5MP/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231458AbiKCOgb (ORCPT + 97 others); Thu, 3 Nov 2022 10:36:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54926 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230410AbiKCOg3 (ORCPT ); Thu, 3 Nov 2022 10:36:29 -0400 Received: from mail-pg1-x52d.google.com (mail-pg1-x52d.google.com [IPv6:2607:f8b0:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80E1110CC; Thu, 3 Nov 2022 07:36:28 -0700 (PDT) Received: by mail-pg1-x52d.google.com with SMTP id 64so1832141pgc.5; Thu, 03 Nov 2022 07:36:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=SGnUSCPqCRbqwfTPIsUS28tudEAjZuU81okBvbtR/vY=; b=N4Ta5MP/lW1TqOZwXvFTBqgjKwaDjju1t8ugm4TnQt9VyA5yzDQ5QWKaNlvYQWLCkn 4HiotHaGSAp3NDKySj+1jmPaZloC7GwIvxj1D+Ut+kyfUGVAUVGtJj8sDEhK2GSLtGY3 QxDjZPpZvjuIaEdtlzxGXv1s7S5xFFjJLeWdKtej/C5kSkw8r5AzSknQ3CHX6SNJoehl nrzXDQ6UByBiD95bhOhtypRIA8OedV7qOsF3Az8Ucl8Z+DJv/jkfU1BaDQCTKWknxdyk eq7RbEMm0ePQ2J5KPRP1i9dTWzWxyy3+n6rG6lJ7esg9p1CrqsP302H73xYqiPd2PjhU Zgpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=SGnUSCPqCRbqwfTPIsUS28tudEAjZuU81okBvbtR/vY=; b=za1ZNX/3mDVBqGCgqxHPxXxDDvlCDgEEQTvfAChXZhLarQIRp8mhq3GKkrMcE1BgTv 0E2titEps5iZ0gCESmgfjbTVlU18hT/ckzBMrICIHhWV82AhpaDy04xdZEqquhuhbKWA XzP2miJzOorFG96BGOD5XpsUTTWNuuAGf1Gu/V96NzgheE3Sp4XrLZBSXpcHRqVWarzZ DoUQDMO1M3HLTU/Zo61rg2tvGkzxBSk1XCRa/A5mRVl2nHWHPOlKcSUDPTx9aRQ6tPFo 6fpj6jxqaxm9mTJfsNN+sX8oADoXUJqLDtEJmZwDpq6EmiIPEp9KIzFMQqREZcsd9lMZ zzvg== X-Gm-Message-State: ACrzQf0L3ppVO4Dirk5aM2TNuDa7sfSANCfSj3aOK1sThF3o1Jyg/QlI hAGR1d1zO3J1RGJy3DSidK8= X-Received: by 2002:a05:6a00:340f:b0:56d:b039:202 with SMTP id cn15-20020a056a00340f00b0056db0390202mr16913722pfb.2.1667486187927; Thu, 03 Nov 2022 07:36:27 -0700 (PDT) Received: from hyeyoo ([114.29.91.56]) by smtp.gmail.com with ESMTPSA id h2-20020a056a00000200b00562cfc80864sm850829pfk.36.2022.11.03.07.36.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Nov 2022 07:36:26 -0700 (PDT) Date: Thu, 3 Nov 2022 23:36:19 +0900 From: Hyeonggon Yoo <42.hyeyoo@gmail.com> To: Feng Tang Cc: Vlastimil Babka , John Thomson , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Roman Gushchin , Dmitry Vyukov , Jonathan Corbet , Andrey Konovalov , "Hansen, Dave" , "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" , "kasan-dev@googlegroups.com" , Robin Murphy , John Garry , Kefeng Wang , Thomas Bogendoerfer , "linux-mips@vger.kernel.org" Subject: Re: [PATCH v6 1/4] mm/slub: enable debugging memory wasting of kmalloc Message-ID: References: <9b71ae3e-7f53-4c9e-90c4-79d3d649f94c@app.fastmail.com> <53b53476-bb1e-402e-9f65-fd7f0ecf94c2@app.fastmail.com> <29271a2b-cf19-4af9-bfe5-5bcff8a23fda@app.fastmail.com> <097d8fba-bd10-a312-24a3-a4068c4f424c@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-0.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HK_RANDOM_ENVFROM, HK_RANDOM_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Nov 03, 2022 at 10:16:12PM +0800, Feng Tang wrote: > On Thu, Nov 03, 2022 at 09:33:28AM +0100, Vlastimil Babka wrote: > [...] > > >> AFAICS before this patch, we "survive" "kmem_cache *s" being NULL as > > >> slab_pre_alloc_hook() will happen to return NULL and we bail out from > > >> slab_alloc_node(). But this is a side-effect, not an intended protection. > > >> Also the CONFIG_TRACING variant of kmalloc_trace() would have called > > >> trace_kmalloc dereferencing s->size anyway even before this patch. > > >> > > >> I don't think we should add WARNS in the slab hot paths just to prevent this > > >> rare error of using slab too early. At most VM_WARN... would be acceptable > > >> but still not necessary as crashing immediately from a NULL pointer is > > >> sufficient. > > >> > > >> So IMHO mips should fix their soc init, > > > > > > Yes, for the mips fix, John has proposed to defer the calling of prom_soc_init(), > > > which looks reasonable. > > > > > >> and we should look into the > > >> CONFIG_TRACING=n variant of kmalloc_trace(), to pass orig_size properly. > > > > > > You mean check if the pointer is NULL and bail out early. > > > > No I mean here: > > > > #else /* CONFIG_TRACING */ > > /* Save a function call when CONFIG_TRACING=n */ > > static __always_inline __alloc_size(3) > > void *kmalloc_trace(struct kmem_cache *s, gfp_t flags, size_t size) > > { > > void *ret = kmem_cache_alloc(s, flags); > > > > ret = kasan_kmalloc(s, ret, size, flags); > > return ret; > > } > > > > we call kmem_cache_alloc() and discard the size parameter, so it will assume > > s->object_size (and as the side-effect, crash if s is NULL). We shouldn't > > add "s is NULL?" checks, but fix passing the size - probably switch to > > __kmem_cache_alloc_node()? and in the following kmalloc_node_trace() analogically. > > Got it, thanks! I might have missed it during some rebasing for the > kmalloc wastage debug patch. That was good catch and I missed too! But FYI I'm suggesting to drop CONFIG_TRACING=n variant: https://lore.kernel.org/linux-mm/20221101222520.never.109-kees@kernel.org/T/#m20ecf14390e406247bde0ea9cce368f469c539ed Any thoughts? > > How about the following fix? > > Thanks, > Feng > > --- > From 9f9fa9da8946fd44625f873c0f51167357075be1 Mon Sep 17 00:00:00 2001 > From: Feng Tang > Date: Thu, 3 Nov 2022 21:32:10 +0800 > Subject: [PATCH] mm/slub: Add missing orig_size parameter for wastage debug > > commit 6edf2576a6cc ("mm/slub: enable debugging memory wasting of > kmalloc") was introduced for debugging kmalloc memory wastage, > and it missed to pass the original request size for kmalloc_trace() > and kmalloc_node_trace() in CONFIG_TRACING=n path. > > Fix it by using __kmem_cache_alloc_node() with correct original > request size. > > Fixes: 6edf2576a6cc ("mm/slub: enable debugging memory wasting of kmalloc") > Suggested-by: Vlastimil Babka > Signed-off-by: Feng Tang > --- > include/linux/slab.h | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/include/linux/slab.h b/include/linux/slab.h > index 90877fcde70b..9691afa569e1 100644 > --- a/include/linux/slab.h > +++ b/include/linux/slab.h > @@ -469,6 +469,9 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignm > __alloc_size(1); > void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t flags, int node) __assume_slab_alignment > __malloc; > +void *__kmem_cache_alloc_node(struct kmem_cache *s, gfp_t flags, int node, > + size_t orig_size, unsigned long caller) __assume_slab_alignment > + __malloc; > > #ifdef CONFIG_TRACING > void *kmalloc_trace(struct kmem_cache *s, gfp_t flags, size_t size) > @@ -482,7 +485,8 @@ void *kmalloc_node_trace(struct kmem_cache *s, gfp_t gfpflags, > static __always_inline __alloc_size(3) > void *kmalloc_trace(struct kmem_cache *s, gfp_t flags, size_t size) > { > - void *ret = kmem_cache_alloc(s, flags); > + void *ret = __kmem_cache_alloc_node(s, flags, NUMA_NO_NODE, > + size, _RET_IP_); > > ret = kasan_kmalloc(s, ret, size, flags); > return ret; > @@ -492,7 +496,8 @@ static __always_inline __alloc_size(4) > void *kmalloc_node_trace(struct kmem_cache *s, gfp_t gfpflags, > int node, size_t size) > { > - void *ret = kmem_cache_alloc_node(s, gfpflags, node); > + void *ret = __kmem_cache_alloc_node(s, gfpflags, node, > + size, _RET_IP_); > > ret = kasan_kmalloc(s, ret, size, gfpflags); > return ret; > -- > 2.34.1 > > > -- Thanks, Hyeonggon