Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp7020602ybf; Fri, 6 Mar 2020 08:51:26 -0800 (PST) X-Google-Smtp-Source: ADFU+vvIPlmJ7BDkD7Kmb+2/XqnnqfV1ZY5fx/W+GdmsbgmGxdzgmiot8RV7xLB06GGxR3JWnunr X-Received: by 2002:a9d:19ef:: with SMTP id k102mr77630otk.220.1583513486839; Fri, 06 Mar 2020 08:51:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583513486; cv=none; d=google.com; s=arc-20160816; b=DYcb8ms3RxF0xccvk21zIjPvgdRvZVib34pc7BVwkHhGuA1Q2aAtSBsZ/qNWL9maw5 THmye3Wq+0DAkVu4mvklln3VwPabvJkvpVzhRVXebWVOnTurYye844vU8DQmSbtLvG6j +gqDn1fgeN3qVUAmhgnS8iEY92cUr66a83xH8tYPl2OkeHUO8m0u5/v+BJBFPKedWqiQ moAkMqC+cY67fZorTtguH0KRzURW1Yt1Ge2ks5irCaIaUyB44X4CrfRy3y2ER9yoWEOZ hSCJ9Mys/VUFzGG/TrNb+/wml2Q5oClgerm0PWS457Jtgg9sHqqxh+FYyDHawjUabj7Q Tgng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:cc:to:subject:from:message-id :dkim-signature; bh=SIQXyXWwelcqc+qeZ+WYNegGKNceKMdyP7M7NjsPmX0=; b=xOuYXgHdRGSUdYUJgQAhBWs5iUu5j9Q1e85I3VeBaUZhH+WVJfceqMs0RgfXt+0qyT ChJenUxk3kvIUls9VI/Kz6OQIbOq/dajLMrf2HWenK3/ZUgQT/Q02UOoXRhMcTAq8j2m Fpuvzj5qgMBmn4BaE3NbgDqkmybJJLRqHrKnNpdns7RkptPskmHmv6kWP39PUr1IcDSN QE6ulkwYehXYLVXmRvtUsMUbnyi/VgBJJj8TJzzGSalJtvSjP7CH2umFA2AMEUIXH4+B dZDL4v1TA10rUQgkTAOGfpDTfPdRv4Dchggm99buy2/JLWd2gs7H+EhWndX+1gZFE08o dM4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=HHxTmVII; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j18si1799004otq.93.2020.03.06.08.51.14; Fri, 06 Mar 2020 08:51:26 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=HHxTmVII; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726259AbgCFQtw (ORCPT + 99 others); Fri, 6 Mar 2020 11:49:52 -0500 Received: from pegase1.c-s.fr ([93.17.236.30]:2880 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725873AbgCFQtw (ORCPT ); Fri, 6 Mar 2020 11:49:52 -0500 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 48YtrX5LCCz9v0DS; Fri, 6 Mar 2020 17:49:48 +0100 (CET) Authentication-Results: localhost; dkim=pass reason="1024-bit key; insecure key" header.d=c-s.fr header.i=@c-s.fr header.b=HHxTmVII; dkim-adsp=pass; dkim-atps=neutral X-Virus-Scanned: Debian amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [192.168.12.234]) (amavisd-new, port 10024) with ESMTP id w4rA5SjLa1tS; Fri, 6 Mar 2020 17:49:48 +0100 (CET) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 48YtrX4C5mz9v0DQ; Fri, 6 Mar 2020 17:49:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1583513388; bh=SIQXyXWwelcqc+qeZ+WYNegGKNceKMdyP7M7NjsPmX0=; h=From:Subject:To:Cc:Date:From; b=HHxTmVIIS3ZAyj0aykHgHgljQdz1abGbuCiRB7jYTQg9VcG7dTFeRVC25esgVtIey Sz+P1LkPl+HERrM5W8DZ0nipllO3XIxcE+WVrSwEEHdfPHZQZC96/iTiOnhGDxSexa 3832hum+zdvmuj+lsMkyQb3ygp9lufxLnCTPn2zA= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id E73528B895; Fri, 6 Mar 2020 17:49:49 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id R84HLGj6qG3t; Fri, 6 Mar 2020 17:49:49 +0100 (CET) Received: from pc16570vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 5562A8B88B; Fri, 6 Mar 2020 17:49:49 +0100 (CET) Received: by localhost.localdomain (Postfix, from userid 0) id 2974965470; Fri, 6 Mar 2020 16:49:49 +0000 (UTC) Message-Id: From: Christophe Leroy Subject: [PATCH v3] powerpc/kasan: Fix shadow memory protection with CONFIG_KASAN_VMALLOC To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Date: Fri, 6 Mar 2020 16:49:49 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With CONFIG_KASAN_VMALLOC, new page tables are created at the time shadow memory for vmalloc area in unmapped. If some parts of the page table still has entries to the zero page shadow memory, the entries are wrongly marked RW. With CONFIG_KASAN_VMALLOC, almost the entire kernel address space is managed by KASAN. To make it simple, just create KASAN page tables for the entire kernel space at kasan_init(). That doesn't use much more space, and that's anyway already done for hash platforms. Fixes: 3d4247fcc938 ("powerpc/32: Add support of KASAN_VMALLOC") Signed-off-by: Christophe Leroy --- v3: Split a too long line v2: Allocate all tables at init instead of doing it when unmapping vmalloc space KASAN pages. Signed-off-by: Christophe Leroy --- arch/powerpc/mm/kasan/kasan_init_32.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/arch/powerpc/mm/kasan/kasan_init_32.c b/arch/powerpc/mm/kasan/kasan_init_32.c index 1a29cf469903..cbcad369fcb2 100644 --- a/arch/powerpc/mm/kasan/kasan_init_32.c +++ b/arch/powerpc/mm/kasan/kasan_init_32.c @@ -120,12 +120,6 @@ static void __init kasan_unmap_early_shadow_vmalloc(void) unsigned long k_cur; phys_addr_t pa = __pa(kasan_early_shadow_page); - if (!early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) { - int ret = kasan_init_shadow_page_tables(k_start, k_end); - - if (ret) - panic("kasan: kasan_init_shadow_page_tables() failed"); - } for (k_cur = k_start & PAGE_MASK; k_cur < k_end; k_cur += PAGE_SIZE) { pmd_t *pmd = pmd_offset(pud_offset(pgd_offset_k(k_cur), k_cur), k_cur); pte_t *ptep = pte_offset_kernel(pmd, k_cur); @@ -143,7 +137,8 @@ void __init kasan_mmu_init(void) int ret; struct memblock_region *reg; - if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) { + if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE) || + IS_ENABLED(CONFIG_KASAN_VMALLOC)) { ret = kasan_init_shadow_page_tables(KASAN_SHADOW_START, KASAN_SHADOW_END); if (ret) -- 2.25.0