Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp977246pxb; Thu, 25 Feb 2021 22:17:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJwK2WopZJ3GqE/obQXdBm1MIKnLjyJz5FqUPc/J90oxPfSlVDp/MeKX5WyS3PSAe+dSgDzO X-Received: by 2002:a17:906:ac6:: with SMTP id z6mr1239020ejf.505.1614320253938; Thu, 25 Feb 2021 22:17:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614320253; cv=none; d=google.com; s=arc-20160816; b=luqX0Ehjy2bkCgmbUTo0yiBmz4ReCkwcZAJUWBvp14EJT/8I/kTdGxbCvdIykYTeR5 5kquvPYEWrPg09qWQjldzzFymv//9/a+fk1e33XyxLY9Fq3CKHBoabihl7wRQQJo7bK8 9Aq/tAoXMcZ9T5lCTHbLac3kuYn4YLnneWU6h+5Ns3jjcJoiQ711f0vG5NzSG86n2M5O 0kzjEBrZqAJKOaAuxGbIk/74OJ0LvHr9hHCuyyUhQlv1snvX+Bd1stTmi8N9bW6be3Zw hwZqvqonzAUTuVszEo1ibM8Iq9X2yiPztefxKjyBWL5QWhqA1hfrlevqqBK7Lywfqfin vGXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=GwxiVagG+5Ouiam1CSPg/AzFcZtOHIwFg+8/NlFG5j4=; b=wNg7YJyh8Q2z0zViLz/dCtp8MQkJ9NdF7tMrpWKesUEHVv8MlsXwq1/HPDnzA6g5lX uTIU62sR+ri7pGWSuWFVczO0XmMeAjzfpC4YuziewDJLAmcLkq9TMhfVyg3w4c3wu/eN N5KAKP7R9krauLkE3/iQRzyNsq2k8HsQeNvGBriP9MOJZQ3AUOLQdkLPDvSpB+gBs36i ROdyJtYczLWIKLtOiGxxBINZo7fOEWPfXs0pwnevOr4bDOnGFZjXOP4Xb1/tRWFjYbfB i+m7NpY9hH+ZG8PAsC3PdgOIiwAF+lCY9sVN3Kgv75iuZK3SbJ9bwjRvyliwyJ5tCvle aezA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e18si5043948edz.446.2021.02.25.22.17.10; Thu, 25 Feb 2021 22:17:33 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229707AbhBZGP0 (ORCPT + 99 others); Fri, 26 Feb 2021 01:15:26 -0500 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:37849 "EHLO relay7-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229554AbhBZGPZ (ORCPT ); Fri, 26 Feb 2021 01:15:25 -0500 X-Originating-IP: 2.7.49.219 Received: from [192.168.1.12] (lfbn-lyo-1-457-219.w2-7.abo.wanadoo.fr [2.7.49.219]) (Authenticated sender: alex@ghiti.fr) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 90ECF20003; Fri, 26 Feb 2021 06:14:37 +0000 (UTC) Subject: Re: [PATCH] riscv: Add KASAN_VMALLOC support To: Palmer Dabbelt Cc: aou@eecs.berkeley.edu, nickhu@andestech.com, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, nylon7@andestech.com, glider@google.com, Paul Walmsley , aryabinin@virtuozzo.com, linux-riscv@lists.infradead.org, dvyukov@google.com References: From: Alex Ghiti Message-ID: Date: Fri, 26 Feb 2021 01:14:36 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Palmer, Le 2/26/21 à 12:32 AM, Palmer Dabbelt a écrit : > On Wed, 24 Feb 2021 23:48:13 PST (-0800), alex@ghiti.fr wrote: >> Le 2/25/21 à 2:42 AM, Alexandre Ghiti a écrit : >>> Populate the top-level of the kernel page table to implement >>> KASAN_VMALLOC, >>> lower levels are filled dynamically upon memory allocation at runtime. >>> >>> Co-developed-by: Nylon Chen >>> Signed-off-by: Nylon Chen >>> Co-developed-by: Nick Hu >>> Signed-off-by: Nick Hu >>> Signed-off-by: Alexandre Ghiti >>> --- >>>   arch/riscv/Kconfig         |  1 + >>>   arch/riscv/mm/kasan_init.c | 35 ++++++++++++++++++++++++++++++++++- >>>   2 files changed, 35 insertions(+), 1 deletion(-) >>> >>> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig >>> index 8eadd1cbd524..3832a537c5d6 100644 >>> --- a/arch/riscv/Kconfig >>> +++ b/arch/riscv/Kconfig >>> @@ -57,6 +57,7 @@ config RISCV >>>       select HAVE_ARCH_JUMP_LABEL >>>       select HAVE_ARCH_JUMP_LABEL_RELATIVE >>>       select HAVE_ARCH_KASAN if MMU && 64BIT >>> +    select HAVE_ARCH_KASAN_VMALLOC if MMU && 64BIT >>>       select HAVE_ARCH_KGDB >>>       select HAVE_ARCH_KGDB_QXFER_PKT >>>       select HAVE_ARCH_MMAP_RND_BITS if MMU >>> diff --git a/arch/riscv/mm/kasan_init.c b/arch/riscv/mm/kasan_init.c >>> index 719b6e4d6075..171569df4334 100644 >>> --- a/arch/riscv/mm/kasan_init.c >>> +++ b/arch/riscv/mm/kasan_init.c >>> @@ -142,6 +142,31 @@ static void __init kasan_populate(void *start, >>> void *end) >>>       memset(start, KASAN_SHADOW_INIT, end - start); >>>   } >>> >>> +void __init kasan_shallow_populate_pgd(unsigned long vaddr, unsigned >>> long end) >>> +{ >>> +    unsigned long next; >>> +    void *p; >>> +    pgd_t *pgd_k = pgd_offset_k(vaddr); >>> + >>> +    do { >>> +        next = pgd_addr_end(vaddr, end); >>> +        if (pgd_page_vaddr(*pgd_k) == (unsigned >>> long)lm_alias(kasan_early_shadow_pmd)) { >>> +            p = memblock_alloc(PAGE_SIZE, PAGE_SIZE); >>> +            set_pgd(pgd_k, pfn_pgd(PFN_DOWN(__pa(p)), PAGE_TABLE)); >>> +        } >>> +    } while (pgd_k++, vaddr = next, vaddr != end); >>> +} >>> + >>> +void __init kasan_shallow_populate(void *start, void *end) >>> +{ >>> +    unsigned long vaddr = (unsigned long)start & PAGE_MASK; >>> +    unsigned long vend = PAGE_ALIGN((unsigned long)end); >>> + >>> +    kasan_shallow_populate_pgd(vaddr, vend); >>> + >>> +    local_flush_tlb_all(); >>> +} >>> + >>>   void __init kasan_init(void) >>>   { >>>       phys_addr_t _start, _end; >>> @@ -149,7 +174,15 @@ void __init kasan_init(void) >>> >>>       kasan_populate_early_shadow((void *)KASAN_SHADOW_START, >>>                       (void *)kasan_mem_to_shadow((void *) >>> -                                VMALLOC_END)); >>> +                                VMEMMAP_END)); >>> +    if (IS_ENABLED(CONFIG_KASAN_VMALLOC)) >>> +        kasan_shallow_populate( >>> +            (void *)kasan_mem_to_shadow((void *)VMALLOC_START), >>> +            (void *)kasan_mem_to_shadow((void *)VMALLOC_END)); >>> +    else >>> +        kasan_populate_early_shadow( >>> +            (void *)kasan_mem_to_shadow((void *)VMALLOC_START), >>> +            (void *)kasan_mem_to_shadow((void *)VMALLOC_END)); >>> >>>       for_each_mem_range(i, &_start, &_end) { >>>           void *start = (void *)_start; >>> >> >> Palmer, this commit should replace (if everyone agrees) Nylon and Nick's >> Commit e178d670f251 ("riscv/kasan: add KASAN_VMALLOC support") that is >> already in for-next. > > Sorry, but it's way too late to be rebasing things.  I can get trying to > have > the history clean, but in this case we're better off having this as an > explicit > fix patch -- changing hashes this late in the process messes with all the > testing. > > I'm not sure what the issue actually is, so it'd be great if you could > send the > fix patch.  If not then LMK and I'll try to figure out what's going on. > Either > way, having the fix will make sure this gets tested properly as whatever's > going on isn't failing for me. > Nylon's patch is functional as is, but as I mentioned here https://patchwork.kernel.org/project/linux-riscv/patch/20210116055836.22366-2-nylon7@andestech.com/, it does unnecessary things (like trying to walk a user page table that does not exist at this point in the boot process). Anyway, I will send another patch rebased on top of Nylon's. Thanks, Alex > _______________________________________________ > linux-riscv mailing list > linux-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-riscv