Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp265615pxb; Thu, 25 Feb 2021 01:45:09 -0800 (PST) X-Google-Smtp-Source: ABdhPJzyC3Ll7DfqElo60dF35rKKqF0P5RxIvVkp6ZV9MWZitLB6qkUnU5UdIz6IiFo3bOhvUEZ9 X-Received: by 2002:a17:906:c102:: with SMTP id do2mr196827ejc.305.1614246309546; Thu, 25 Feb 2021 01:45:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614246309; cv=none; d=google.com; s=arc-20160816; b=0mf5pO++PI0wGGuboDPRpkZvz1D888SeylyzdIfgBJs0rf3GOl10xeOpe1Y7oKy7ll 2aJxNhgXJMIP815GPxEU7/uWM8qA8c1nwF3ZaDXCmY0gt1T3Uug7wFLH/GELpgmTNKlE +hpNjdkkkXuMpoqJn8FP3UqYbBPK/bdQqWp8elzMzJDEEK6O/nYoiqlcjeAPYQG6XXIa 8EVMvluiV4ukhsrVwsaVE0WCZvew7WZ6PVpbiP3EuhVtepVBd2Q3vgGAR7+nzQlcvqVg wT0ePwK91rndLM6Dkt3OI8jHChGDZre6E6+0yoHkAn47cFGOiYNRs4aTqhl+fdmJXcGn gXqw== 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 :to:subject; bh=kiU34z/6dfIrzGkzds6PWGiPGyCNW+yhDpsz8IjSqlA=; b=S37cgQzYqiYxhkE01dXdSEomiceAzRm1UMt2VtN0xDjsyOzcEMNyTnZTUtnrSK4FsF wnK7Ir/4RzOWwsHWBUN79gkdXUtGtOsnVgdjAHI63uET9qgurO+1Xz137CR11gK0ATlR OiO5063yLhWV8/TOxB+nRDe0QCD/63tyP22ROzGhHk8RMniSo7rsjnaTyxyVmxko4WTR QoXOZh7oLWP3Jxea4qET1FhL2x4V7Rp8t584sNwmrSI8NF+RMhSfHhBNt5N0ANMHtrg7 pu/BMEe4tp+jGmtVDznoIawgD9Nz7XS/Ob5RBLUDWV2i13TkKi+wNZ8Jz9vlGXi3J5HG J1rw== 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 f16si2831098edy.306.2021.02.25.01.44.47; Thu, 25 Feb 2021 01:45:09 -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 S234824AbhBYHtK (ORCPT + 99 others); Thu, 25 Feb 2021 02:49:10 -0500 Received: from relay1-d.mail.gandi.net ([217.70.183.193]:9101 "EHLO relay1-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234308AbhBYHtH (ORCPT ); Thu, 25 Feb 2021 02:49:07 -0500 X-Originating-IP: 81.185.161.35 Received: from [192.168.43.237] (35.161.185.81.rev.sfr.net [81.185.161.35]) (Authenticated sender: alex@ghiti.fr) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 5F65A24000A; Thu, 25 Feb 2021 07:48:14 +0000 (UTC) Subject: Re: [PATCH] riscv: Add KASAN_VMALLOC support To: Paul Walmsley , Palmer Dabbelt , Albert Ou , Nylon Chen , Nick Hu , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com References: <20210225074227.3176-1-alex@ghiti.fr> From: Alex Ghiti Message-ID: Date: Thu, 25 Feb 2021 02:48:13 -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: <20210225074227.3176-1-alex@ghiti.fr> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Thanks, Alex