Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp948335pxx; Thu, 29 Oct 2020 19:52:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw0H7H055n4y5/GD4wZsdOM+NqscOIXK2yWpW/mvBTBGWC2fMQS06be0F11nfOV2Da2VfNB X-Received: by 2002:aa7:dcd6:: with SMTP id w22mr61596edu.378.1604026320367; Thu, 29 Oct 2020 19:52:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1604026320; cv=none; d=google.com; s=arc-20160816; b=qt1y6VE5cJtOymqZyr2TrdSxGZUHAJAXyvzHIpFsc5pwLba3dTjEKfl0trT/OeSf6P M5BaVjWO7SuoxF1SQwug7RQzsmRVWXY3SHK1A473A/sa+4owda3ZMQMpXO8bakYCIyNs dHsgZzmG6wcOI4ELR/gPjOeFvdrwipCOj6TIb+irs2crd9mc8aK2jJrjX7GDhNB50gk+ yi0QCq1FzfKVi3tbAgDw0xQ3h911DjJr5H30rXSNK8LzqPUf4KMU6/xGUuW+8b9WZW7w gK6kccp8+kiPJLiRBZnXsd2tkMGHEXHEGI9DO8PHr4u3ydURBM/l5kydmwglsKAH0r1M 4Ocg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=U5VSV5EOvuuPrA9xNEsowWeAohxv+a7+9KVx3Owvda8=; b=HsqRAQ9TdNv3PC4AMX1qEhAvqaqc5kVsRNzg86pzpPBfFPtG54Q+KBxYNOx+sipfl0 A4z/+ksxrzz+WE5ccFm4eZ4thSuinlxF7VCT1qD6vKZE35OSBG88pfknAc6I9chFcA7h BT07OaCSv2fz5wWB+WCrqTKIYXd3uB1JDlwYYKxvHEGfXiPX+tLIkv3sLx80PrOhtUGo Z7eYeasT3aUkaSeDVPOyhnUmrYeWGa2Pa4yp2VzHt2YiSpG0qL/1NL/vrBjIMx/94Dbo RQ+qC7WmSwQPN3orj5fIeTUJMwpCkAJ1L+qq6Rpat6xUiSyKW7T/TQUPrfoTND+QalKK 8fHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="hvIenZ/1"; 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 sa7si324799ejb.453.2020.10.29.19.51.38; Thu, 29 Oct 2020 19:52:00 -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="hvIenZ/1"; 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 S1726217AbgJ3Ct4 (ORCPT + 99 others); Thu, 29 Oct 2020 22:49:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39174 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725800AbgJ3Ctz (ORCPT ); Thu, 29 Oct 2020 22:49:55 -0400 Received: from mail-lj1-x241.google.com (mail-lj1-x241.google.com [IPv6:2a00:1450:4864:20::241]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9ED4BC0613CF for ; Thu, 29 Oct 2020 19:49:54 -0700 (PDT) Received: by mail-lj1-x241.google.com with SMTP id t13so5293703ljk.12 for ; Thu, 29 Oct 2020 19:49:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=U5VSV5EOvuuPrA9xNEsowWeAohxv+a7+9KVx3Owvda8=; b=hvIenZ/1jqtu8F4Mb0B2dqX3Djjzd9dPzPPm8fbk2Mwd/NiwUcIzSfqkEPHxiORqR4 +aIvclP1ZbKKnv1jUCg3tzYc1GiM+hF5IUs+OyqfQTZGlXr41lEV7y2wJ1kdGO2BiXSB CKLDb8KGnWVabTZglW8tiyCFheuiAIuURPJ3/ELAuGlWcjQkQcVSyidXoFP60SqKgX3z tH+yqOICZSjxMeDIYwrUjgqaMnrV0SnB8jWmiQrNeNpYXJtm9WinMf3SuKfo3NvBCNlv 9Mnu1Jv1KkGDPn/5sd9AUaPRKa0PB7F2Oy/sF9S4C1kUCxmLNOD4HhVn5Xig2k+O/kSY LxOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=U5VSV5EOvuuPrA9xNEsowWeAohxv+a7+9KVx3Owvda8=; b=DLPhEV/fU3D/MJeExb4mnTV6M4qWuI/G9kFI0IuY/vxxB0RZas79p+yDEXKAbumoSO L0PEZhoJJ+QHhiVv1sNU2qDU2Q2NLvnehnDJnxcx5xzVQXjH+uIjfbT90Rix4lPRVxVx chQDIwtIs5Wha8ujlnC/pyfjrSpdxuxX9mr92Zu/Wem33bYrUySTZgkInA9ByOG/kI/b VBfKt+0LrUxyLijUlSz3G675u/H1JPX/u24OlS0yGIhkzPcchf5X9Jnvmrb+VV2dzR4Q ukl+PaPOKg7gJHNKx02JWVPHna+dm4v3qDXMMA7l5WtYBrAM0NEoDx6e6OCSfDSzXj6W b6zg== X-Gm-Message-State: AOAM530CnlP1SOrL6qBA0bJnJNGpGP5aPx+Ts8YRqJfrAa6n0MZztN0J nY8Hb6DV3cZtFQSd3pQVl+tPLTBI2clJ6r2ZoXTeCg== X-Received: by 2002:a2e:8816:: with SMTP id x22mr82450ljh.377.1604026192956; Thu, 29 Oct 2020 19:49:52 -0700 (PDT) MIME-Version: 1.0 References: <20201029131649.182037-1-elver@google.com> <20201029131649.182037-4-elver@google.com> In-Reply-To: <20201029131649.182037-4-elver@google.com> From: Jann Horn Date: Fri, 30 Oct 2020 03:49:26 +0100 Message-ID: Subject: Re: [PATCH v6 3/9] arm64, kfence: enable KFENCE for ARM64 To: Marco Elver Cc: Andrew Morton , Alexander Potapenko , "H . Peter Anvin" , "Paul E . McKenney" , Andrey Konovalov , Andrey Ryabinin , Andy Lutomirski , Borislav Petkov , Catalin Marinas , Christoph Lameter , Dave Hansen , David Rientjes , Dmitry Vyukov , Eric Dumazet , Greg Kroah-Hartman , Hillf Danton , Ingo Molnar , Jonathan Cameron , Jonathan Corbet , Joonsoo Kim , joern@purestorage.com, Kees Cook , Mark Rutland , Pekka Enberg , Peter Zijlstra , SeongJae Park , Thomas Gleixner , Vlastimil Babka , Will Deacon , "the arch/x86 maintainers" , "open list:DOCUMENTATION" , kernel list , kasan-dev , Linux ARM , Linux-MM Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Oct 29, 2020 at 2:17 PM Marco Elver wrote: > Add architecture specific implementation details for KFENCE and enable > KFENCE for the arm64 architecture. In particular, this implements the > required interface in . > > KFENCE requires that attributes for pages from its memory pool can > individually be set. Therefore, force the entire linear map to be mapped > at page granularity. Doing so may result in extra memory allocated for > page tables in case rodata=full is not set; however, currently > CONFIG_RODATA_FULL_DEFAULT_ENABLED=y is the default, and the common case > is therefore not affected by this change. [...] > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig [...] > + select HAVE_ARCH_KFENCE if (!ARM64_16K_PAGES && !ARM64_64K_PAGES) "if ARM64_4K_PAGES"? [...] > diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c [...] > @@ -312,6 +313,9 @@ static void __do_kernel_fault(unsigned long addr, unsigned int esr, > "Ignoring spurious kernel translation fault at virtual address %016lx\n", addr)) > return; > > + if (kfence_handle_page_fault(addr)) > + return; As in the X86 case, we may want to ensure that this doesn't run for permission faults, only for non-present pages. Maybe move this down into the third branch of the "if" block below (neither permission fault nor NULL deref)? > + > if (is_el1_permission_fault(addr, esr, regs)) { > if (esr & ESR_ELx_WNR) > msg = "write to read-only memory";