From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.4 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B57D0C2D0A3 for ; Fri, 30 Oct 2020 02:49:56 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 2528B2087E for ; Fri, 30 Oct 2020 02:49:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="hvIenZ/1" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2528B2087E Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 9F4606B0075; Thu, 29 Oct 2020 22:49:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 97CCC6B0078; Thu, 29 Oct 2020 22:49:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 844356B007B; Thu, 29 Oct 2020 22:49:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0131.hostedemail.com [216.40.44.131]) by kanga.kvack.org (Postfix) with ESMTP id 516B96B0075 for ; Thu, 29 Oct 2020 22:49:55 -0400 (EDT) Received: from smtpin15.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id EFD45180AD80F for ; Fri, 30 Oct 2020 02:49:54 +0000 (UTC) X-FDA: 77427061908.15.cause41_5a0059227292 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin15.hostedemail.com (Postfix) with ESMTP id CC80A1814B0C1 for ; Fri, 30 Oct 2020 02:49:54 +0000 (UTC) X-HE-Tag: cause41_5a0059227292 X-Filterd-Recvd-Size: 5529 Received: from mail-lj1-f194.google.com (mail-lj1-f194.google.com [209.85.208.194]) by imf43.hostedemail.com (Postfix) with ESMTP for ; Fri, 30 Oct 2020 02:49:54 +0000 (UTC) Received: by mail-lj1-f194.google.com with SMTP id x6so5365908ljd.3 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=QdazpFWrsbhuLYie9BCIPYKfyHt8FVW3rZKcNJH6+u3yy8G+PecOtyY+9WmL8bfUkM 8yEhMnttBByZ9/n8bq7iOu29P60jNGO6RP/SAc6J6JWZL3IyZHqbW5hf3pBkGkYu1M6i 8x6mEbknf7ndjK4cBc6Jl4ZPRg6WfZAZrw+hM2v7y7HrPJMnWoxnrkOPDM89SvXwQd84 3NYpY2PwDI4oBoRRDS5G9Lf+fS4Im5AkJZMU8QOCaG+/J4LL8YroTmv5oWmdTbyeyUrV D9c+cphSTBQwKEIDOzF8a6ZWND9WAY1FrrXPdZTrXeXLlQOXYwyiTsRukdbcc1NkRn4k g3dA== X-Gm-Message-State: AOAM5301pF1T2Z/gjuR695XTEyLnOnLACnKXYkIk4oSgaQVZJU/CjYn1 q5dSQd/wBolVrnVS1YftNuMzWAYjWyeOcb8twMx3bw== X-Google-Smtp-Source: ABdhPJy5BCp9b2onPlMEzZvXxzY2+7KT6JF4Piv/BGIOWQ/jH5h8osPXMpnQh5s0vTKqhfe/Bc0g9m3Dzk03z8KGets= 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" X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: 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";