Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp4152859pxf; Tue, 30 Mar 2021 00:01:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJztRbn80bXOVQlNUCHefGDTI03UA5xvcZ986k74Dulcj8lzH+7ptaqcThmsCcwGSgONouKX X-Received: by 2002:aa7:c907:: with SMTP id b7mr32297922edt.37.1617087703946; Tue, 30 Mar 2021 00:01:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617087703; cv=none; d=google.com; s=arc-20160816; b=jt6ac5wN77DUFdMlCI8OuYZebEqhRloS5Z5KBUXATKFN+ULj2244wlr692lFMnVe6Y 1DhDXwzkeII3Z39Y42+qhZiLUAHB/O+Sv+0StS/PVDXsD77G27CRNdz9ZJlqMWdSI1ep Qp9MQ24fMayuNL6qR1xPVkL+nm91OoWjWvX6oxa3nwSlhA36q4pmG616Ulv1Wp4W+DY0 env50E4d7vVpWwkfPVxIc7sW7Rf48a7IuzQUpJh98vZyrTn697ZuGcsEO6Dx6d5YXogw yyPzn6+pQRyTqSt1ruV8HxZLDBJ1OnG7mi5Rhk+336OPe2bcjR3spSSpq/sODYkBfp20 tbIQ== 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=hMimholtJavSZ5k5RmskDIdPrM99sfcyiNVXiZ0C39Q=; b=kjIJWIm8IlqiXdenysdJGifINmLj2hsla+h3OdtZ26nDWBRBjcnLSM0ZtJtT7ICdXj M8ZKdy1UV5TbmsGfjZJ/05AA0ML7tDKOcZSVy3GGo+0iNYdJNmg59RlRqtDtvWIyQeG2 lJJ2sy8n+yiZnIC1ltJs5ifJI0mpZJk8EKGoDwrg+/6iKPplXpya8Bq7BRZ4cNtZhAaX cZwL+JuY9mlKIwGgDcklcLB+Vsp+tzFAZakQm1PqB9OGzRfg4eVprh1/FV0ARlxGholS rzqiCZ0U/m19vIqwOSBvafcPj3rwMMTVOVX9GXL3vGt6ywWd/wfcAglqsbNd68ZM+xUL G6TA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=OH5d8xlZ; 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 y12si15175187eda.74.2021.03.30.00.01.16; Tue, 30 Mar 2021 00:01:43 -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=OH5d8xlZ; 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 S231240AbhC3G56 (ORCPT + 99 others); Tue, 30 Mar 2021 02:57:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60404 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229827AbhC3G5v (ORCPT ); Tue, 30 Mar 2021 02:57:51 -0400 Received: from mail-qv1-xf49.google.com (mail-qv1-xf49.google.com [IPv6:2607:f8b0:4864:20::f49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B01BEC061762 for ; Mon, 29 Mar 2021 23:57:50 -0700 (PDT) Received: by mail-qv1-xf49.google.com with SMTP id j3so12489130qvo.1 for ; Mon, 29 Mar 2021 23:57:50 -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=hMimholtJavSZ5k5RmskDIdPrM99sfcyiNVXiZ0C39Q=; b=OH5d8xlZXFJybWRhJjBkXcR78y6Dg99Fi6Wu9wJe5SF7XuE2276SxkOPb4i0864u7I v1QOvvNSyVuPWNjaUbDzCNwhIj4w9cZWDbBcqD6PwayVLKhhI3moyW6cOIBtXItiRTDN e9mtpAXVixiFF0oBoeyjL+dLI3is78pOxEec8dpytg/re1V5PWPOlgOTqyVQjCmxi66x imkUfN9EK+bKYuPQiCfzm9PpjcWnAKe9rMBS/PE18lvblT/WZA0CeXA3Lpd609dUOsZE xTu1+OiQ8favi0WgZDFc1mkmN023k92e3sDkUivRuX5GLNu7cU682cYXndI/TnLV6z3P k4AA== 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=hMimholtJavSZ5k5RmskDIdPrM99sfcyiNVXiZ0C39Q=; b=Thk80EX4gdcxFEQx4kEevbKyyOf+EBYK7rsw8x6Y8rAxivGiq4AS6UeLeI2IbQ3RQe 61CnBmxWXFME+p0hAMfXTVJp22oe0Sxq3AID3J7fiX6r0u9cS3XINUUN0wMp5TFMW87E ZcCnQs5yLIZLOLnNERToUkWX28hD15SDx/+peDQOZIo2FovmmZsSBthxhrVC5IxEI+zz 0/9ynbXHG0GwMUaCg636t3NexFqVOb4M+cvMEOhQWwq33qMoUVTR6WQegZnp9PLTMefd MLF45CZaS8D3bv7qXPmm1cFLQLDGFmxuUJLgbu26SJ1VCqKWk0h1wYrEK99+IzYelEM1 xKzw== X-Gm-Message-State: AOAM530SEAamMXOgC1nbWdZMinWlrR5nmqxoPpRD/RfDmnN23G3hX8Hq gYgTpXcsrsgFDRa2s8SuY7Et5P2YwA== X-Received: from elver.muc.corp.google.com ([2a00:79e0:15:13:40b1:c44f:3404:ad6a]) (user=elver job=sendgmr) by 2002:a0c:e148:: with SMTP id c8mr20761637qvl.18.1617087469699; Mon, 29 Mar 2021 23:57:49 -0700 (PDT) Date: Tue, 30 Mar 2021 08:57:37 +0200 Message-Id: <20210330065737.652669-1-elver@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog Subject: [PATCH mm] kfence, x86: fix preemptible warning on KPTI-enabled systems From: Marco Elver To: elver@google.com, akpm@linux-foundation.org Cc: glider@google.com, dvyukov@google.com, andreyknvl@google.com, jannh@google.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, kasan-dev@googlegroups.com, x86@kernel.org, Tomi Sarvela Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On systems with KPTI enabled, we can currently observe the following warning: BUG: using smp_processor_id() in preemptible caller is invalidate_user_asid+0x13/0x50 CPU: 6 PID: 1075 Comm: dmesg Not tainted 5.12.0-rc4-gda4a2b1a5479-kfence_1+ #1 Hardware name: Hewlett-Packard HP Pro 3500 Series/2ABF, BIOS 8.11 10/24/2012 Call Trace: dump_stack+0x7f/0xad check_preemption_disabled+0xc8/0xd0 invalidate_user_asid+0x13/0x50 flush_tlb_one_kernel+0x5/0x20 kfence_protect+0x56/0x80 ... While it normally makes sense to require preemption to be off, so that the expected CPU's TLB is flushed and not another, in our case it really is best-effort (see comments in kfence_protect_page()). Avoid the warning by disabling preemption around flush_tlb_one_kernel(). Link: https://lore.kernel.org/lkml/YGIDBAboELGgMgXy@elver.google.com/ Reported-by: Tomi Sarvela Signed-off-by: Marco Elver --- arch/x86/include/asm/kfence.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/kfence.h b/arch/x86/include/asm/kfence.h index 97bbb4a9083a..05b48b33baf0 100644 --- a/arch/x86/include/asm/kfence.h +++ b/arch/x86/include/asm/kfence.h @@ -56,8 +56,13 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect) else set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT)); - /* Flush this CPU's TLB. */ + /* + * Flush this CPU's TLB, assuming whoever did the allocation/free is + * likely to continue running on this CPU. + */ + preempt_disable(); flush_tlb_one_kernel(addr); + preempt_enable(); return true; } -- 2.31.0.291.g576ba9dcdaf-goog