Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp397739pxv; Wed, 30 Jun 2021 08:04:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzO6dmahM7nHMeEt8jaJNnlELTBsjX53QooCxPGwHTqAaQz5PpJM22Hnd8o/8O+xJakG9Wy X-Received: by 2002:a05:6402:18f6:: with SMTP id x54mr48894680edy.53.1625065489488; Wed, 30 Jun 2021 08:04:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625065489; cv=none; d=google.com; s=arc-20160816; b=RldsB9xRZY1IcPO/3y+Eot8krcK0CrPX/u9p8bs/4BxmrWsr9XItnQfAMC5SAB9mfy UVroAw3iXi7U3RNr61s0bhwSBR2OtSvdC0addWEMdgYcnaGVDA5oGWkceqq9dcUs4xBV tJ1kmjcY1ZUBAP3KBvJHJ70PbHwQfdSW1hny5op8us0Ln9+scyH5zddrOmBDsMmXdNV/ OUOgroYBQfud9hnX3fkugbFBt3flm71Bxc8tMJmiZU62smk+KURzP43Gjvd1rpFlgfWz coyrGBhC5/Y44mXNzx1U+iF10nN6GDVeSzBqSlm+qt/+1ttJ1dCuMZ1gjbrx4BzzLiOz uGyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:mime-version:message-id:date :dkim-signature; bh=lvrIaQ6ThTaENrGFdNSy44zlHv6vzHwWs8O331HJaOs=; b=z9SMAU5MfATz09UenFajh1xhDIvzikh/JYu9zb4aG2+E6WGGTM/nAcc/KHRUoPJKc8 wJWXriOxLLryc3VUZM7Kdg+t2151rLcXiBDbq+f13Uou785OUYEQhZfiXVjusYBYrl5g sm3gEWBs89mY87D2FUfnnK4boCY5ggnpjph6dSsMHMMci3Ahfgw/n2ycAl0p8LNrmx6u ZOjwrPoIhUtXUkDOF1+TlWY0tjkI+dwmTXjHXW7jYCsd9p9hTZV/Jt3NGFBpQqyZ49LR bXddbhbR3afuv0JvUeUMIuo7NXcqtR1JN76umrkMVYF9fn2N42Cnu7+Czkn10tVoFlX1 CmuA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=UedDNaHa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c21si19320019edv.215.2021.06.30.08.04.24; Wed, 30 Jun 2021 08:04:49 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=UedDNaHa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235777AbhF3PFJ (ORCPT + 99 others); Wed, 30 Jun 2021 11:05:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34346 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235352AbhF3PFI (ORCPT ); Wed, 30 Jun 2021 11:05:08 -0400 Received: from mail-wm1-x34a.google.com (mail-wm1-x34a.google.com [IPv6:2a00:1450:4864:20::34a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A4E74C061756 for ; Wed, 30 Jun 2021 08:02:39 -0700 (PDT) Received: by mail-wm1-x34a.google.com with SMTP id f9-20020a7bcd090000b02901eca9a0d67cso1438971wmj.0 for ; Wed, 30 Jun 2021 08:02:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=lvrIaQ6ThTaENrGFdNSy44zlHv6vzHwWs8O331HJaOs=; b=UedDNaHadRhM1ur9CcmhNsbBrMJzHEB1U+0r2AOapItU7e7vsnxt3c9g0LnyNpCox3 oY1ub/Vq0GNFDP4URYTbHrG8G5qqLvTSMvekpZ4F39GE+u/bot8Kanw4LCwn+j36aEhj i47cryF1FdWFZi8blrc9xRb9zSV5lPP5aTPFNlpA3Y2di1UfAV6KrCZKzGTJqnsnSEQU sgUjRWtus0jBIR8XPgwE9r6tldW5PgFmHRGZm3jmRejMWv/x/2NmjRQGf/uWQZsvRxvE ymtFZELBVHFsnM8UZ/4gj3dTCBECQeH/udKlGBdrzTQKS3VQ5J61/+i+aKSV6UlzGt7g 5ARQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=lvrIaQ6ThTaENrGFdNSy44zlHv6vzHwWs8O331HJaOs=; b=UbYIAiGfPkO6GiLOBpjew1MdzNAjYifKq3fOJue48YuNc+uI4haOl53qAaNJ40EBnb +ktyhXKEbKQkQI1FnuUZgpPcXOh+J+lQr+WKFiZnHYcvj/3FbCIYd7WbSKTrunAnna84 Nd8jALnlQP1WxkgCs5Io7KjnDDkjoxRAcQs1M54U6QfOTKUmYnR+F6LtCVOBRTfH51ej igzc5gkU4w3LFeNjb48TcZ1BvwtKcId8JVznAxb29mSR/dyYBP197OJplk5Yxteukj9y iBBJMxNXL0JRDizrVxsBJGGYgSiYo4fSc2sIM2saO8O85o/Xv/6kVTpTkpgaEr+otlQU QuUw== X-Gm-Message-State: AOAM532984wC2lo6CUbwqPpwEOIchVRhr8pYtZ/YF7+zo3siOYmuCxoT PZtdZZ5cm0rnWoX9uttslxSAGS5Slj0= X-Received: from glider.muc.corp.google.com ([2a00:79e0:15:13:a3fc:e8:8089:1013]) (user=glider job=sendgmr) by 2002:a05:600c:1552:: with SMTP id f18mr39350083wmg.184.1625065358251; Wed, 30 Jun 2021 08:02:38 -0700 (PDT) Date: Wed, 30 Jun 2021 17:02:33 +0200 Message-Id: <20210630150234.1109496-1-glider@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.32.0.93.g670b81a890-goog Subject: [PATCH v4 1/2] kfence: move the size check to the beginning of __kfence_alloc() From: Alexander Potapenko To: akpm@linux-foundation.org Cc: dvyukov@google.com, elver@google.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, stable@vger.kernel.org, gregkh@linuxfoundation.org, jrdr.linux@gmail.com, Alexander Potapenko Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Check the allocation size before toggling kfence_allocation_gate. This way allocations that can't be served by KFENCE will not result in waiting for another CONFIG_KFENCE_SAMPLE_INTERVAL without allocating anything. Suggested-by: Marco Elver Cc: Andrew Morton Cc: Dmitry Vyukov Cc: Marco Elver Cc: Greg Kroah-Hartman Cc: stable@vger.kernel.org # 5.12+ Signed-off-by: Alexander Potapenko Reviewed-by: Marco Elver --- mm/kfence/core.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/mm/kfence/core.c b/mm/kfence/core.c index 4d21ac44d5d35..33bb20d91bf6a 100644 --- a/mm/kfence/core.c +++ b/mm/kfence/core.c @@ -733,6 +733,13 @@ void kfence_shutdown_cache(struct kmem_cache *s) 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) + return NULL; + /* * allocation_gate only needs to become non-zero, so it doesn't make * sense to continue writing to it and pay the associated contention @@ -757,9 +764,6 @@ void *__kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags) if (!READ_ONCE(kfence_enabled)) return NULL; - if (size > PAGE_SIZE) - return NULL; - return kfence_guarded_alloc(s, size, flags); } -- 2.32.0.93.g670b81a890-goog