Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3698551pxv; Mon, 26 Jul 2021 09:39:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw8MeHXEPcaWQEFuo0QE9vO7RvhfpDYF8ZEM5pJbJH/tBpK/lUadJqOxOPwqEHaY+hFl5sh X-Received: by 2002:a05:6402:50d4:: with SMTP id h20mr7092584edb.7.1627317511397; Mon, 26 Jul 2021 09:38:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627317511; cv=none; d=google.com; s=arc-20160816; b=Lydk9y9nIJSpJQVrUByjzWrGWhsGfk3O5shvR0lxn24Q31Uk311bZH+DZfJz+DUUBk Vh1eXghy+SIyR5Y2l2UCeolt4Wk5suGpZeSljorBJTcuO1KhI55eOdrDzdJag7rLM06a YqaNqqj5c0VLyROZtkqAi8KYwuu9ulxQnTD8FuJFMF0ixa1DEDbqFZBYEuLO6yn1Znwm Huio0uzZz8JicQebBNmuWB+ERQtrrYlmPx18HEryPUq8dUboTk9h/S2CmHNhbg6pgB3f 7/pkOaIG4wxT/TJ11wWV7tvgTeOatqJG3VUsiWjglUF9lumwjSMTNUr9P7NzVND5l9CT m92g== 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=a3RPclM2HvkFCwSgUepeNxo5uReA/y1UIjmzYiCs1rc=; b=VAptCcL/Kugc33AmIKd/SE/e/MZ2uL4N44WpTps+zf1+hHVKit6zE1NKiEYGhNvl3B fhkctGuNXgmTdOFK4UzR8CIxphQU9hI7Ds3QVn93EIzQu4C4Zi7SsVimJDCr5hGAnl4c hCYJBkXRSFRMAwfXPbvLghzuvP0KqGp4hxbTq828a+Br7O5z3Sls9QdXl4GFUNELQH9r JHcdoG8pkVahkn8jH/pxDTjMjyrUVn/slSQ7Ot8PdaOQn8rhhLjSwW496WchnG8IPRxb /oYF2fqNW2RNmF4RHciw1o3bB9RhVlZN8U+OaMIqPbt/RHnp6sQqzc53sAT8BM9On20q sDPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=nHK7UbVr; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h14si415879edq.245.2021.07.26.09.38.08; Mon, 26 Jul 2021 09:38:31 -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=@linuxfoundation.org header.s=korg header.b=nHK7UbVr; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240340AbhGZPzU (ORCPT + 99 others); Mon, 26 Jul 2021 11:55:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:51906 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237855AbhGZPeu (ORCPT ); Mon, 26 Jul 2021 11:34:50 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 858706056B; Mon, 26 Jul 2021 16:15:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627316118; bh=ZzRv0JOfJjaUGMuerpvp3Et3Y0kb7NsmdPJtLOwTmOU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nHK7UbVrDyIAndmMm15I3nx4Qzptt45Ze5pb9p6HMdxrQj4ZwUsQTXttuEbMsAN0b 1IVOU9Koq2+2edYNFrJCIGWFDzukdE+mrYWZCrkS9Ban74hEGeJ4AA4AdMdbkXydVP Jn9Xg5uoAjxmq3f0GKC7CHYUt5klXYNaDfEtJcXI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Alexander Potapenko , Marco Elver , Dmitry Vyukov , Andrew Morton , Linus Torvalds Subject: [PATCH 5.13 196/223] kfence: move the size check to the beginning of __kfence_alloc() Date: Mon, 26 Jul 2021 17:39:48 +0200 Message-Id: <20210726153852.606420670@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210726153846.245305071@linuxfoundation.org> References: <20210726153846.245305071@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alexander Potapenko commit 235a85cb32bb123854ad31de46fdbf04c1d57cda upstream. 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. Link: https://lkml.kernel.org/r/20210714092222.1890268-1-glider@google.com Signed-off-by: Alexander Potapenko Suggested-by: Marco Elver Reviewed-by: Marco Elver Cc: Dmitry Vyukov Cc: Marco Elver Cc: Greg Kroah-Hartman Cc: [5.12+] Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/kfence/core.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) --- a/mm/kfence/core.c +++ b/mm/kfence/core.c @@ -734,6 +734,13 @@ void kfence_shutdown_cache(struct kmem_c 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 * cost, in case we have a large number of concurrent allocations. @@ -757,9 +764,6 @@ void *__kfence_alloc(struct kmem_cache * if (!READ_ONCE(kfence_enabled)) return NULL; - if (size > PAGE_SIZE) - return NULL; - return kfence_guarded_alloc(s, size, flags); }