Received: by 2002:a05:6512:3d0e:0:0:0:0 with SMTP id d14csp57450lfv; Tue, 12 Apr 2022 17:08:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwY+lUrNAAQ/JKaOZUy6fryNLHbvpm4HFvVlYqt1zfMHqzPU9D3pkgoVM2ck5dcyD/zHYF2 X-Received: by 2002:a17:902:d717:b0:156:20a9:d388 with SMTP id w23-20020a170902d71700b0015620a9d388mr39871638ply.19.1649808532153; Tue, 12 Apr 2022 17:08:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649808532; cv=none; d=google.com; s=arc-20160816; b=w14ZY6X6kkBz5/Fnwg2WdmfZhiUIWfCatffZiy4bbABlTavQqdQuuaG+lulT0XEaEU LZf+JvCvBqOwkKcTHFDOZKnStVqynmluAXzWji2Iafyxm7gzUNJ6oC6isOJv9N0fe8Tq iqSKlDNfe2osOB5k3m2Lee903XVicP1uIkMh5igbMBSqa6BcQYlMf42y8rjijtai1st5 AyV6z9Y6UMu9ORyrMYPWcBPnmQ63YeNHd9IOFvyK33MxzP9rm1tQmQJbgK1lLuGPby8N lHOJ68FqA9wkIL/p3MOJaXoj7xlab//Kc7rf4IZlIjG0Ccr5UFQQyyQjc16d6TdP83E2 lYjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=y1i2ySXCGMIHkUIYVPo5+8mtqoKP2G+3NOPBOfNe8b8=; b=WhAVX0lz5molTMVtZ2QylJ9mNjMWErdxYc7BCZMkugoPxslzvR4r4KW6P3zEkrd/6Y /5NWrxjNpyb22EQSY4RyAE7lzontTDmvmAijSdJ5pK0yF2GMcJABd4emtpBVSs2UbJ/Q bejc30tWIX6y4Yi76DPtUx6DBVTDAA3ZhyMciniUmwEVCmg0fmrYip6GOfsGclbjDhvg J8uM7N4L7ZTN2g5fA22Fsr/Q04dxsm13049yYe1eSEiMnmSeFOCVbBTNOUvyRlXOqgMp u0LFXoEPyRKxHXA3fv+lyJwF98F8HYtc01caWWivrQQP2C3cTzJEagE0CXAyHeiJXkXz R7Jg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=PG9moHRY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id u11-20020a056a00124b00b004fb47469b7asi13466431pfi.87.2022.04.12.17.08.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 17:08:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=PG9moHRY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 964A9160C31; Tue, 12 Apr 2022 15:28:34 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351586AbiDLHDf (ORCPT + 99 others); Tue, 12 Apr 2022 03:03:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48054 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351517AbiDLGxy (ORCPT ); Tue, 12 Apr 2022 02:53:54 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4A32137A8C; Mon, 11 Apr 2022 23:41:40 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id EFE61B818C8; Tue, 12 Apr 2022 06:41:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D73CC385AD; Tue, 12 Apr 2022 06:41:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649745697; bh=x1XlqSf6Lmtee3YQ6jZ3wFvK9KhITNobT1uPo4v1guY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PG9moHRYdiXAtqCC+Yhdsv3HD1dsgXMa7wJafM8DPjNcgVwpiNFGeBXWd3iGimnjI apra+qgGvnpYWDcVnhL4UTwTNUv3O2BnC78UFg1WhRjRTe803IH5NVRTKpOXRsq1yT gw3u/Ywdchrcna2DAcMVL8DzuMUd+Td9Gt1/HBKs= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Marco Elver , Dmitry Vyukov , Alexander Potapenko , Aleksandr Nogikh , Jann Horn , Taras Madan , Andrew Morton , Linus Torvalds , Sasha Levin Subject: [PATCH 5.15 008/277] kfence: count unexpectedly skipped allocations Date: Tue, 12 Apr 2022 08:26:51 +0200 Message-Id: <20220412062942.273989199@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412062942.022903016@linuxfoundation.org> References: <20220412062942.022903016@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE 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 From: Marco Elver [ Upstream commit 9a19aeb5665068c3e2727230588684aae2cab7ef ] Maintain a counter to count allocations that are skipped due to being incompatible (oversized, incompatible gfp flags) or no capacity. This is to compute the fraction of allocations that could not be serviced by KFENCE, which we expect to be rare. Link: https://lkml.kernel.org/r/20210923104803.2620285-2-elver@google.com Signed-off-by: Marco Elver Reviewed-by: Dmitry Vyukov Acked-by: Alexander Potapenko Cc: Aleksandr Nogikh Cc: Jann Horn Cc: Taras Madan Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- mm/kfence/core.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/mm/kfence/core.c b/mm/kfence/core.c index 84555b8233ef..f26f55850ad7 100644 --- a/mm/kfence/core.c +++ b/mm/kfence/core.c @@ -113,6 +113,8 @@ enum kfence_counter_id { KFENCE_COUNTER_FREES, KFENCE_COUNTER_ZOMBIES, KFENCE_COUNTER_BUGS, + KFENCE_COUNTER_SKIP_INCOMPAT, + KFENCE_COUNTER_SKIP_CAPACITY, KFENCE_COUNTER_COUNT, }; static atomic_long_t counters[KFENCE_COUNTER_COUNT]; @@ -122,6 +124,8 @@ static const char *const counter_names[] = { [KFENCE_COUNTER_FREES] = "total frees", [KFENCE_COUNTER_ZOMBIES] = "zombie allocations", [KFENCE_COUNTER_BUGS] = "total bugs", + [KFENCE_COUNTER_SKIP_INCOMPAT] = "skipped allocations (incompatible)", + [KFENCE_COUNTER_SKIP_CAPACITY] = "skipped allocations (capacity)", }; static_assert(ARRAY_SIZE(counter_names) == KFENCE_COUNTER_COUNT); @@ -272,8 +276,10 @@ static void *kfence_guarded_alloc(struct kmem_cache *cache, size_t size, gfp_t g list_del_init(&meta->list); } raw_spin_unlock_irqrestore(&kfence_freelist_lock, flags); - if (!meta) + if (!meta) { + atomic_long_inc(&counters[KFENCE_COUNTER_SKIP_CAPACITY]); return NULL; + } if (unlikely(!raw_spin_trylock_irqsave(&meta->lock, flags))) { /* @@ -744,8 +750,10 @@ void *__kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags) * Perform size check before switching kfence_allocation_gate, so that * we don't disable KFENCE without making an allocation. */ - if (size > PAGE_SIZE) + if (size > PAGE_SIZE) { + atomic_long_inc(&counters[KFENCE_COUNTER_SKIP_INCOMPAT]); return NULL; + } /* * Skip allocations from non-default zones, including DMA. We cannot @@ -753,8 +761,10 @@ void *__kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags) * properties (e.g. reside in DMAable memory). */ if ((flags & GFP_ZONEMASK) || - (s->flags & (SLAB_CACHE_DMA | SLAB_CACHE_DMA32))) + (s->flags & (SLAB_CACHE_DMA | SLAB_CACHE_DMA32))) { + atomic_long_inc(&counters[KFENCE_COUNTER_SKIP_INCOMPAT]); return NULL; + } if (atomic_inc_return(&kfence_allocation_gate) > 1) return NULL; -- 2.35.1