From patchwork Tue Feb 26 17:22:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830645 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BE28F13B5 for ; Tue, 26 Feb 2019 17:22:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A36CD2D426 for ; Tue, 26 Feb 2019 17:22:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9786A2D428; Tue, 26 Feb 2019 17:22:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F3CE42D42D for ; Tue, 26 Feb 2019 17:22:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 860C88E0001; Tue, 26 Feb 2019 12:22:45 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 7B57E8E0005; Tue, 26 Feb 2019 12:22:45 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 543178E0001; Tue, 26 Feb 2019 12:22:45 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by kanga.kvack.org (Postfix) with ESMTP id DC5B18E0003 for ; Tue, 26 Feb 2019 12:22:44 -0500 (EST) Received: by mail-wm1-f72.google.com with SMTP id i64so559351wmg.3 for ; Tue, 26 Feb 2019 09:22:44 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=hTJrfrNY8LS5ZO8s8Ac31/wAdL77hGVOtcoy12Rml60=; b=ajlwUD0q8tR4O2Qar+UBz79buwsEiaW3ReaBPS8K6Etx14U4dwDWruZUBoGyuvWjmf EZ1fgZ26nbbsPxSPkUcLLV8RDnSDM8PFmPdQom1gwfeIRqYmgabTaLw4zVLuHe/DD2SM 8XkC8Etpumql8/wBZ1O3KM/iTIN7hzsGy/nnxZ950VW1Kkxn9VTjg8OfxzSXgtDCUX0i GbUcM9L8o7NYCxfwUV+NdYBVnsluaogcMR4JjfekJL8bvrBnGZ0PkcN9OMd3GhAN9b4i D5uIducR8jjEdc/Y09DyC41mVUjcgIUPqITpls103sn1NcRg2Z5Qe/T+B8PtApsItCc+ OYvA== X-Gm-Message-State: AHQUAuZIQdRh6qU0tfuVCm+kq9d0Ud5tlTIItUVMVlftMD9cZ3ujivs0 pp+EL1Za6ydowRrshJ2JVVKsePhQwkdKrfPcrBQO/ghoZqXmXoegNSCSLojvjolw7+zjG8QPIUe /PrIhzwcv4cZoTmLWJC0Qqa0Gklo+PFhl3EfXyVyAHxm5brqm0HeDYucg1l3fiemJqA== X-Received: by 2002:adf:f7c9:: with SMTP id a9mr18393319wrq.39.1551201764375; Tue, 26 Feb 2019 09:22:44 -0800 (PST) X-Google-Smtp-Source: AHgI3IYAopQX7kPWwU61T+5uGwPlfAOqsOrbaG3AhuabvlWtefQfvFcUju8/BLaOlCI13nuePF75 X-Received: by 2002:adf:f7c9:: with SMTP id a9mr18393269wrq.39.1551201763354; Tue, 26 Feb 2019 09:22:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201763; cv=none; d=google.com; s=arc-20160816; b=HD4K3vQL6BhFCyf+Pqd6mjPdI02n9VqC6SXu/dfXg8M1UGBJQJC3MOUPj7lHQwo55G hmIJpsy9+t4+0wlljHepwUgAOYFKxqV5yf/fH48uzc4vqJVngffcSsrpnzWP8oEL8p2N I8sdTZQSw9986F32YSNlZnh5BwgZXSTJm+lqHCW0jI6GP/Yyh1rrPLHJj8ZQLxLzs0an pXwyml4fsEXeoK7zP7yHFjYih0CVrCHxWNvYje21zlFB4nYN+pGicEnP11kF0DZnAxgj UWx0OcaW03EF7P2u+qfhKrBSEpg4R4cC2AVD6zlcANEC3UsZG5e+++y+vve01YlKKtEP 4TZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=hTJrfrNY8LS5ZO8s8Ac31/wAdL77hGVOtcoy12Rml60=; b=uAYp1iSkhkFAXqSl5CQzrO2Cnz1/FNvmTo6es1rrUF63mxefAUTQtffW7x3T/03fMz ZYNR0yqj2EOO33upBb6Lh6YARAXmCZdKKQP+rGDMj6sGsKqRLGyne8elMiW9WQUBaPb9 a6a/ygMuGMcePHNyWMjy1rHCiBKSfV8r9RcHYfl40ReI8OIpePmkkSOTiPzpujxQ2EgR 0dVFcnjIz3HBJ/cLQvlli/BPCTWffBL8/RHIrlkSMRDQr51pnqAe6Q68v5Coh7s3HQBn XDR7JzLh8aqheH1ECNu842PqcbZodOv1mzYhC7WmKMtjdiGgJpBBQYdn+c0lMUQT5NfP 1i8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=TVhWyjgH; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id 124si7639007wmz.184.2019.02.26.09.22.43 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:43 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=TVhWyjgH; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485H51f9Tz9vJLZ; Tue, 26 Feb 2019 18:22:41 +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=TVhWyjgH; 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 6uGqo0zc52lX; Tue, 26 Feb 2019 18:22:41 +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 4485H504Blz9vJLY; Tue, 26 Feb 2019 18:22:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201761; bh=hTJrfrNY8LS5ZO8s8Ac31/wAdL77hGVOtcoy12Rml60=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=TVhWyjgH1Q5l/zPFKGL2XOV/0dKMvxZVzAzU1iTxKD8gWl376rKS2541nFKJ6b7n/ O9sgsEHg+YpxoHQzQi0z8jDI1sDtrMyrEmbG9TvZGJrgsN/n8cuXL2o7Wf6GpPCDp9 m7EwZJMQ2kjc8ZJjpWlOqiguBGC0gDRI7QsnMO3k= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A21F48B97A; Tue, 26 Feb 2019 18:22:42 +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 w_bvTWO6jymg; Tue, 26 Feb 2019 18:22:42 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 5A7C08B96A; Tue, 26 Feb 2019 18:22:42 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 3A79F6F7B5; Tue, 26 Feb 2019 17:22:42 +0000 (UTC) Message-Id: <85668899ce3782a11045f678390ac36ca60ef153.1551161392.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 01/11] powerpc/32: Move early_init() in a separate file To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:42 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP In preparation of KASAN, move early_init() into a separate file in order to allow deactivation of KASAN for that function. Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/Makefile | 2 +- arch/powerpc/kernel/early_32.c | 36 ++++++++++++++++++++++++++++++++++++ arch/powerpc/kernel/setup_32.c | 28 ---------------------------- 3 files changed, 37 insertions(+), 29 deletions(-) create mode 100644 arch/powerpc/kernel/early_32.c diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index cddadccf551d..45e47752b692 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -93,7 +93,7 @@ extra-y += vmlinux.lds obj-$(CONFIG_RELOCATABLE) += reloc_$(BITS).o -obj-$(CONFIG_PPC32) += entry_32.o setup_32.o +obj-$(CONFIG_PPC32) += entry_32.o setup_32.o early_32.o obj-$(CONFIG_PPC64) += dma-iommu.o iommu.o obj-$(CONFIG_KGDB) += kgdb.o obj-$(CONFIG_BOOTX_TEXT) += btext.o diff --git a/arch/powerpc/kernel/early_32.c b/arch/powerpc/kernel/early_32.c new file mode 100644 index 000000000000..cf3cdd81dc47 --- /dev/null +++ b/arch/powerpc/kernel/early_32.c @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * Early init before relocation + */ + +#include +#include +#include +#include +#include + +/* + * We're called here very early in the boot. + * + * Note that the kernel may be running at an address which is different + * from the address that it was linked at, so we must use RELOC/PTRRELOC + * to access static data (including strings). -- paulus + */ +notrace unsigned long __init early_init(unsigned long dt_ptr) +{ + unsigned long offset = reloc_offset(); + + /* First zero the BSS -- use memset_io, some platforms don't have caches on yet */ + memset_io((void __iomem *)PTRRELOC(&__bss_start), 0, __bss_stop - __bss_start); + + /* + * Identify the CPU type and fix up code sections + * that depend on which cpu we have. + */ + identify_cpu(offset, mfspr(SPRN_PVR)); + + apply_feature_fixups(); + + return KERNELBASE + offset; +} diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 1f0b7629c1a6..3f0d51b4b2f5 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c @@ -63,34 +63,6 @@ EXPORT_SYMBOL(DMA_MODE_READ); EXPORT_SYMBOL(DMA_MODE_WRITE); /* - * We're called here very early in the boot. - * - * Note that the kernel may be running at an address which is different - * from the address that it was linked at, so we must use RELOC/PTRRELOC - * to access static data (including strings). -- paulus - */ -notrace unsigned long __init early_init(unsigned long dt_ptr) -{ - unsigned long offset = reloc_offset(); - - /* First zero the BSS -- use memset_io, some platforms don't have - * caches on yet */ - memset_io((void __iomem *)PTRRELOC(&__bss_start), 0, - __bss_stop - __bss_start); - - /* - * Identify the CPU type and fix up code sections - * that depend on which cpu we have. - */ - identify_cpu(offset, mfspr(SPRN_PVR)); - - apply_feature_fixups(); - - return KERNELBASE + offset; -} - - -/* * This is run before start_kernel(), the kernel has been relocated * and we are running with enough of the MMU enabled to have our * proper kernel virtual addresses From patchwork Tue Feb 26 17:22:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830649 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3082617E6 for ; Tue, 26 Feb 2019 17:22:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 145482D3E0 for ; Tue, 26 Feb 2019 17:22:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 082E72D3E1; Tue, 26 Feb 2019 17:22:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9311D2D430 for ; Tue, 26 Feb 2019 17:22:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A29C98E0005; Tue, 26 Feb 2019 12:22:46 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 9B2B98E0003; Tue, 26 Feb 2019 12:22:46 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 854888E0005; Tue, 26 Feb 2019 12:22:46 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by kanga.kvack.org (Postfix) with ESMTP id 271098E0003 for ; Tue, 26 Feb 2019 12:22:46 -0500 (EST) Received: by mail-wr1-f70.google.com with SMTP id b9so6647893wrw.14 for ; Tue, 26 Feb 2019 09:22:46 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=oHghTvnVgM5iLsW9vWXEequS4LO8QERrM8ZuJ6h5wq4=; b=qYDAnnF7rh6xHxEJTSgplGXqwis3lC0wvwjtcu5oxvxpQ3in8qMArh0KiD2dWLuoV5 wjqE4fFnBRb4xcq/5WSxJwjt2aOBHqC8QmJUVN1nwnnRHXghYa9tDB8ss5E/kaVMG/Hi 5qF7dCgxhnW8pscVmYpyzwtN9livb4FBjfwb3JJYxKfNNuQ2OS8F7HSqjjJb8rAFw/Um L3AL1ijBdPAkzZENV0WWKV43pleqgGcar+PQzUF8VeBKVU6Ppu+RaQ/1GJ/qneShNZo3 24fqlHvsAmOBStp9jty+2rt4EYfR5HCQdFIokguQ8xrcX79t44G0fYEdqFbxMZJrQ2tK VoDw== X-Gm-Message-State: AHQUAuYGmI9+wIVhsjLoO61yw8LFHsYzGud5y1gfV1phOYmBQ6ITTZVg /KcZzz0s+brPe5/CaXVacmGvxSUSdEc1W1+Oe1181wbqiShmRYkFNWAx5EnUkECAnHsM4CoEVQr xjLWcU8Tque5dcd2eY1WjJU+pyn+f/awbRefrb2ltEomoxiJL1+Xw1qB+O53/bwcpVg== X-Received: by 2002:adf:b3d1:: with SMTP id x17mr9809596wrd.15.1551201765645; Tue, 26 Feb 2019 09:22:45 -0800 (PST) X-Google-Smtp-Source: AHgI3IZYrqJKjNeKQ0Qb/4KqADpcHxWVlHqH0Z3gOMXsK+3zNE6gl5ZnW+MX16Xhps00nkoo2UO5 X-Received: by 2002:adf:b3d1:: with SMTP id x17mr9809535wrd.15.1551201764371; Tue, 26 Feb 2019 09:22:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201764; cv=none; d=google.com; s=arc-20160816; b=OdwjfZaLbI2+kQ9fTalmUe8r6DZWJBmEW30DxpHzIjn+SFghCiP2aFj7RhjXwyON3w uKA0FrCFOl0PiXvcZfCK5LzFkOHBxjcMDi0UdXq+YaQepJht/rpO+qKsyLzYT+ioWz9k 2bpwCFta0cWloRC+UGnSEdx5zqK7E4xq+5va1aZbJi0xyv20HTeyXhRnwIE7AOLCezpU m3zKqrKdxlkJUE02V0kP+0sFeBDFPTUT+s7d7WjQzLI8MttnWQGNOPVtS/G4c5t2F5QO XEcZzut4fjike4r7CkOOxYwoOGFLfJNlvcS+G91FJMvn2EvRQJYTtN04S+fjwmWBmDff tVLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=oHghTvnVgM5iLsW9vWXEequS4LO8QERrM8ZuJ6h5wq4=; b=rQOLk7CKbloKMmAGECgKpouu1+DQpKmj3yVYb+0c8zzbPV/bcdk9mhDmB4587yIdX5 Vvdhb5txbESyTpx4t2ZvMp5pSPqF0YjxK/Q8FqubPzNOWwCDdvtSFj8UFQwY8rmfVph+ 5K7J+xTsADtonZJaCI2bwSIi69K5GO8PZmemhLapZstqin29LcWSvEPdiyzBeybYdsy5 zgnORvCs+PS502feCeVulLgmxNowbu/4g2Fa/fno6iCkXyirblFePahI7bU/Ld8FDOKf mYj5leVoZkjTIR2m+ow+7XC4bvXmj2EJwwsIgyKxzaUgIpFlXWuCHWVVN+CNDNk/jcWP t9lw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=GAmh5lh3; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id e13si10159691wrv.387.2019.02.26.09.22.44 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:44 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=GAmh5lh3; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485H61YDdz9vJLc; Tue, 26 Feb 2019 18:22:42 +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=GAmh5lh3; 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 soow2-6HSENf; Tue, 26 Feb 2019 18:22:42 +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 4485H60S6jz9vJLY; Tue, 26 Feb 2019 18:22:42 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201762; bh=oHghTvnVgM5iLsW9vWXEequS4LO8QERrM8ZuJ6h5wq4=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=GAmh5lh3ZWilqfscY3ubC5F4zxDBpZssOw/aY9WDHxru45Aln57JYJoUqKmh0EwYg ZqE339wMqCZTz2s/gCMwEH8tVLurOenepMJdjtXY10zONwXWIWI+H4AFXsndzV1XxX gQ8B0sXcU7sn69JW23U+J8pnaM2IulQorMrnkJeI= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id AE5DC8B97A; Tue, 26 Feb 2019 18:22:43 +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 kwd6bLmzUTYr; Tue, 26 Feb 2019 18:22:43 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 5D26A8B96A; Tue, 26 Feb 2019 18:22:43 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 401776F7B5; Tue, 26 Feb 2019 17:22:43 +0000 (UTC) Message-Id: <54c5d48a557647be5e0269a22be277891bbdd7f7.1551161392.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 02/11] powerpc: prepare string/mem functions for KASAN To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:43 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP CONFIG_KASAN implements wrappers for memcpy() memmove() and memset() Those wrappers are doing the verification then call respectively __memcpy() __memmove() and __memset(). The arches are therefore expected to rename their optimised functions that way. For files on which KASAN is inhibited, #defines are used to allow them to directly call optimised versions of the functions without going through the KASAN wrappers. See commit 393f203f5fd5 ("x86_64: kasan: add interceptors for memset/memmove/memcpy functions") for details. Other string / mem functions do not (yet) have kasan wrappers, we therefore have to fallback to the generic versions when KASAN is active, otherwise KASAN checks will be skipped. Signed-off-by: Christophe Leroy --- arch/powerpc/include/asm/kasan.h | 15 +++++++++++++++ arch/powerpc/include/asm/string.h | 32 +++++++++++++++++++++++++++++--- arch/powerpc/kernel/prom_init_check.sh | 10 +++++++++- arch/powerpc/lib/Makefile | 11 ++++++++--- arch/powerpc/lib/copy_32.S | 15 +++++++++------ arch/powerpc/lib/mem_64.S | 11 +++++++---- arch/powerpc/lib/memcpy_64.S | 5 +++-- 7 files changed, 80 insertions(+), 19 deletions(-) create mode 100644 arch/powerpc/include/asm/kasan.h diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h new file mode 100644 index 000000000000..c3161b8fc017 --- /dev/null +++ b/arch/powerpc/include/asm/kasan.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_KASAN_H +#define __ASM_KASAN_H + +#ifdef CONFIG_KASAN +#define _GLOBAL_KASAN(fn) .weak fn ; _GLOBAL(__##fn) ; _GLOBAL(fn) +#define _GLOBAL_TOC_KASAN(fn) .weak fn ; _GLOBAL_TOC(__##fn) ; _GLOBAL_TOC(fn) +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn) ; EXPORT_SYMBOL(fn) +#else +#define _GLOBAL_KASAN(fn) _GLOBAL(fn) +#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(fn) +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(fn) +#endif + +#endif diff --git a/arch/powerpc/include/asm/string.h b/arch/powerpc/include/asm/string.h index 1647de15a31e..9bf6dffb4090 100644 --- a/arch/powerpc/include/asm/string.h +++ b/arch/powerpc/include/asm/string.h @@ -4,14 +4,17 @@ #ifdef __KERNEL__ +#ifndef CONFIG_KASAN #define __HAVE_ARCH_STRNCPY #define __HAVE_ARCH_STRNCMP +#define __HAVE_ARCH_MEMCHR +#define __HAVE_ARCH_MEMCMP +#define __HAVE_ARCH_MEMSET16 +#endif + #define __HAVE_ARCH_MEMSET #define __HAVE_ARCH_MEMCPY #define __HAVE_ARCH_MEMMOVE -#define __HAVE_ARCH_MEMCMP -#define __HAVE_ARCH_MEMCHR -#define __HAVE_ARCH_MEMSET16 #define __HAVE_ARCH_MEMCPY_FLUSHCACHE extern char * strcpy(char *,const char *); @@ -27,7 +30,27 @@ extern int memcmp(const void *,const void *,__kernel_size_t); extern void * memchr(const void *,int,__kernel_size_t); extern void * memcpy_flushcache(void *,const void *,__kernel_size_t); +void *__memset(void *s, int c, __kernel_size_t count); +void *__memcpy(void *to, const void *from, __kernel_size_t n); +void *__memmove(void *to, const void *from, __kernel_size_t n); + +#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) +/* + * For files that are not instrumented (e.g. mm/slub.c) we + * should use not instrumented version of mem* functions. + */ +#define memcpy(dst, src, len) __memcpy(dst, src, len) +#define memmove(dst, src, len) __memmove(dst, src, len) +#define memset(s, c, n) __memset(s, c, n) + +#ifndef __NO_FORTIFY +#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */ +#endif + +#endif + #ifdef CONFIG_PPC64 +#ifndef CONFIG_KASAN #define __HAVE_ARCH_MEMSET32 #define __HAVE_ARCH_MEMSET64 @@ -49,8 +72,11 @@ static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n) { return __memset64(p, v, n * 8); } +#endif #else +#ifndef CONFIG_KASAN #define __HAVE_ARCH_STRLEN +#endif extern void *memset16(uint16_t *, uint16_t, __kernel_size_t); #endif diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh index 667df97d2595..181fd10008ef 100644 --- a/arch/powerpc/kernel/prom_init_check.sh +++ b/arch/powerpc/kernel/prom_init_check.sh @@ -16,8 +16,16 @@ # If you really need to reference something from prom_init.o add # it to the list below: +grep "^CONFIG_KASAN=y$" .config >/dev/null +if [ $? -eq 0 ] +then + MEM_FUNCS="__memcpy __memset" +else + MEM_FUNCS="memcpy memset" +fi + WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush -_end enter_prom memcpy memset reloc_offset __secondary_hold +_end enter_prom $MEM_FUNCS reloc_offset __secondary_hold __secondary_hold_acknowledge __secondary_hold_spinloop __start strcmp strcpy strlcpy strlen strncmp strstr kstrtobool logo_linux_clut224 reloc_got2 kernstart_addr memstart_addr linux_banner _stext diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 79396e184bca..47a4de434c22 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile @@ -8,9 +8,14 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE) CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE) -obj-y += string.o alloc.o code-patching.o feature-fixups.o +obj-y += alloc.o code-patching.o feature-fixups.o -obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o strlen_32.o +ifndef CONFIG_KASAN +obj-y += string.o memcmp_$(BITS).o +obj-$(CONFIG_PPC32) += strlen_32.o +endif + +obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o @@ -34,7 +39,7 @@ obj64-$(CONFIG_KPROBES_SANITY_TEST) += test_emulate_step.o \ test_emulate_step_exec_instr.o obj-y += checksum_$(BITS).o checksum_wrappers.o \ - string_$(BITS).o memcmp_$(BITS).o + string_$(BITS).o obj-y += sstep.o ldstfp.o quad.o obj64-y += quad.o diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S index ba66846fe973..fc4fa7246200 100644 --- a/arch/powerpc/lib/copy_32.S +++ b/arch/powerpc/lib/copy_32.S @@ -14,6 +14,7 @@ #include #include #include +#include #define COPY_16_BYTES \ lwz r7,4(r4); \ @@ -68,6 +69,7 @@ CACHELINE_BYTES = L1_CACHE_BYTES LG_CACHELINE_BYTES = L1_CACHE_SHIFT CACHELINE_MASK = (L1_CACHE_BYTES-1) +#ifndef CONFIG_KASAN _GLOBAL(memset16) rlwinm. r0 ,r5, 31, 1, 31 addi r6, r3, -4 @@ -81,6 +83,7 @@ _GLOBAL(memset16) sth r4, 4(r6) blr EXPORT_SYMBOL(memset16) +#endif /* * Use dcbz on the complete cache lines in the destination @@ -91,7 +94,7 @@ EXPORT_SYMBOL(memset16) * We therefore skip the optimised bloc that uses dcbz. This jump is * replaced by a nop once cache is active. This is done in machine_init() */ -_GLOBAL(memset) +_GLOBAL_KASAN(memset) cmplwi 0,r5,4 blt 7f @@ -150,7 +153,7 @@ _GLOBAL(memset) 9: stbu r4,1(r6) bdnz 9b blr -EXPORT_SYMBOL(memset) +EXPORT_SYMBOL_KASAN(memset) /* * This version uses dcbz on the complete cache lines in the @@ -163,12 +166,12 @@ EXPORT_SYMBOL(memset) * We therefore jump to generic_memcpy which doesn't use dcbz. This jump is * replaced by a nop once cache is active. This is done in machine_init() */ -_GLOBAL(memmove) +_GLOBAL_KASAN(memmove) cmplw 0,r3,r4 bgt backwards_memcpy /* fall through */ -_GLOBAL(memcpy) +_GLOBAL_KASAN(memcpy) 1: b generic_memcpy patch_site 1b, patch__memcpy_nocache @@ -242,8 +245,8 @@ _GLOBAL(memcpy) stbu r0,1(r6) bdnz 40b 65: blr -EXPORT_SYMBOL(memcpy) -EXPORT_SYMBOL(memmove) +EXPORT_SYMBOL_KASAN(memcpy) +EXPORT_SYMBOL_KASAN(memmove) generic_memcpy: srwi. r7,r5,3 diff --git a/arch/powerpc/lib/mem_64.S b/arch/powerpc/lib/mem_64.S index 3c3be02f33b7..7cd6cf6822a2 100644 --- a/arch/powerpc/lib/mem_64.S +++ b/arch/powerpc/lib/mem_64.S @@ -12,7 +12,9 @@ #include #include #include +#include +#ifndef CONFIG_KASAN _GLOBAL(__memset16) rlwimi r4,r4,16,0,15 /* fall through */ @@ -29,8 +31,9 @@ _GLOBAL(__memset64) EXPORT_SYMBOL(__memset16) EXPORT_SYMBOL(__memset32) EXPORT_SYMBOL(__memset64) +#endif -_GLOBAL(memset) +_GLOBAL_KASAN(memset) neg r0,r3 rlwimi r4,r4,8,16,23 andi. r0,r0,7 /* # bytes to be 8-byte aligned */ @@ -95,9 +98,9 @@ _GLOBAL(memset) 10: bflr 31 stb r4,0(r6) blr -EXPORT_SYMBOL(memset) +EXPORT_SYMBOL_KASAN(memset) -_GLOBAL_TOC(memmove) +_GLOBAL_TOC_KASAN(memmove) cmplw 0,r3,r4 bgt backwards_memcpy b memcpy @@ -138,4 +141,4 @@ _GLOBAL(backwards_memcpy) beq 2b mtctr r7 b 1b -EXPORT_SYMBOL(memmove) +EXPORT_SYMBOL_KASAN(memmove) diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S index 273ea67e60a1..862b515b8868 100644 --- a/arch/powerpc/lib/memcpy_64.S +++ b/arch/powerpc/lib/memcpy_64.S @@ -11,6 +11,7 @@ #include #include #include +#include #ifndef SELFTEST_CASE /* For big-endian, 0 == most CPUs, 1 == POWER6, 2 == Cell */ @@ -18,7 +19,7 @@ #endif .align 7 -_GLOBAL_TOC(memcpy) +_GLOBAL_TOC_KASAN(memcpy) BEGIN_FTR_SECTION #ifdef __LITTLE_ENDIAN__ cmpdi cr7,r5,0 @@ -229,4 +230,4 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) 4: ld r3,-STACKFRAMESIZE+STK_REG(R31)(r1) /* return dest pointer */ blr #endif -EXPORT_SYMBOL(memcpy) +EXPORT_SYMBOL_KASAN(memcpy) From patchwork Tue Feb 26 17:22:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830651 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7F7A513B5 for ; Tue, 26 Feb 2019 17:22:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 603522D388 for ; Tue, 26 Feb 2019 17:22:55 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 53FB52D3A6; Tue, 26 Feb 2019 17:22:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 306642D3D2 for ; Tue, 26 Feb 2019 17:22:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 103748E0006; Tue, 26 Feb 2019 12:22:48 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 068858E0007; Tue, 26 Feb 2019 12:22:47 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D5D478E0006; Tue, 26 Feb 2019 12:22:47 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by kanga.kvack.org (Postfix) with ESMTP id 5BDA88E0003 for ; Tue, 26 Feb 2019 12:22:47 -0500 (EST) Received: by mail-wr1-f69.google.com with SMTP id m7so6588150wrn.15 for ; Tue, 26 Feb 2019 09:22:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=0QUiUDKjGToLpkzDPACzHo0JlotDF22Jf4TM6PGaWLw=; b=At488zhd2+JWRPjkQ0V3nPY8h16wqTbrr/6IZ751FYZOrxJdkfD/eCj3w8H6iRUsfr o7REu1p1IfGx2D52yv6dz5CkR0aGpEVkoZs9xeickGil924uH/vQeeNljwGrCMKr/6Vg DyBKRAlHin/2BzqVjp9Owf+quuaxSnUeRv39/vKFUqZHyxFQA9zWCzF25k52wfh8ysLV k2nVuWMpQpv3qYNeYuscUaZyFJ+sVozM6uXlwQ953AADvTg8lg0/1CGgOPGyqrbustqE GdrQLQon+4weDyMFONIhXCEbJBHlxoMxreMnpwKXP9Od8InWEkGL/xzLkBwsFGSmMdu4 m4nA== X-Gm-Message-State: AHQUAua6Xap1fixvSajFKScxu9X6WJ8dBq5IiQUqnmZWHr/sSMpmQEk5 eCPQzR4Ox1a/SjCuEBulvTb3dT2NKONLGDNWD+aA6snCVh2etSsOXyrC3Cre65mhnILCyFR7X5E nUazs4CazM6ySG228ao1oQMyoWir9ydQ3okBpEYPobB8yEem9OiXpfv/H04dd69TxeQ== X-Received: by 2002:a5d:4f91:: with SMTP id d17mr18708725wru.67.1551201766807; Tue, 26 Feb 2019 09:22:46 -0800 (PST) X-Google-Smtp-Source: AHgI3Ib4Zw+kZJSEkxa4rGIW14WM9ju4mAuK1c73zJhTgkG+MNZ5Sj3pMrlMykM1P66FSbl8Infy X-Received: by 2002:a5d:4f91:: with SMTP id d17mr18708653wru.67.1551201765386; Tue, 26 Feb 2019 09:22:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201765; cv=none; d=google.com; s=arc-20160816; b=OXs/zqA+Ylx191VXzgclUbXPzjWXkEpEemYbD4MDsBmrJobGp8RID8FUladHq5lMLz 9JKlcYypUhScj8fO8sTdNIx/7df30jDrf3hvYzfi306Amzdo3cmX7YvIt3hEXwe7KWwc r7JWkWZa9/7af4WkrWEvUfKz3/SCj4Mullxw0wz5aV20XGSBEmWoa55NxOlZe8aFBU4V oPCz4VQaHtcyE4NnEJ8Sz0RUTlzelABQCSZP2lYMaWxSaS18EUtzOO8W058esv7HzpV4 0ifI79pxHY3cE1YU8D1bcemU77G6Vqr2nwjvhBuJqTBv9hNHSr1rwwg1QuFLaveobaZp SbVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=0QUiUDKjGToLpkzDPACzHo0JlotDF22Jf4TM6PGaWLw=; b=AEI6jgmQSSCSPtGBYlUkiFU/drYab4c26Jxc6m7aXwMMrfbP1aGj+mwhx4f064h/5H mKF/sHL1RfAzmhiG0hK9sValOsQImLpt5pTZCt2R2t8nkTk5qWq3K3N5gOhLfwtsmbO2 yLQ3rodyndY/ZVmm7Q0JAYt04k9LEAeRy0Ne5xlBCwxDiQaOJ6ls56Wp1sox1S9+0bJs hxbJLQwSKqyxFWBToh8g6yNTtdXWGawP+fVzDcysy3r8x04HEI42Dgh/zQCPmDzxMemF cf9ETH6d6FJV3g2qPzIknQD5R3aB+tGsqn5JfNHHCBUyh05RKvRfN/DKEyc9Pchc86TA HMjw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=pQr0TLBQ; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id l10si7358407wme.68.2019.02.26.09.22.45 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:45 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=pQr0TLBQ; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485H72RvJz9vJLd; Tue, 26 Feb 2019 18:22:43 +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=pQr0TLBQ; 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 PZf4mHXeE6w4; Tue, 26 Feb 2019 18:22:43 +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 4485H71K1jz9vJLY; Tue, 26 Feb 2019 18:22:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201763; bh=0QUiUDKjGToLpkzDPACzHo0JlotDF22Jf4TM6PGaWLw=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=pQr0TLBQ4eR9EuTvoAjTc41AKQMmEBcjz8cdsYomIQWiRTdvvB8YjbXRBIGRGH+cJ L0s2Oz0252mphg9sII3J5E77eUAWALpUBuQaefDcnwcawKBTeFExwMNz4lOesMuTwn A8EGRLAsH8CK97xYRRqRWJ5aEVmurpToztVAB6Mc= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id CE2708B97A; Tue, 26 Feb 2019 18:22:44 +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 F2qHldtmh0UV; Tue, 26 Feb 2019 18:22:44 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 6EBEE8B96A; Tue, 26 Feb 2019 18:22:44 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 470A86F7B5; Tue, 26 Feb 2019 17:22:44 +0000 (UTC) Message-Id: <3dc2d1c23a3fe65dc99f9e3b82fb34c151e13d33.1551161392.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 03/11] powerpc/prom_init: don't use string functions from lib/ To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:44 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP When KASAN is active, the string functions in lib/ are doing the KASAN checks. This is too early for prom_init. This patch implements dedicated string functions for prom_init, which will be compiled in with KASAN disabled. Size of prom_init before the patch: text data bss dec hex filename 12060 488 6960 19508 4c34 arch/powerpc/kernel/prom_init.o Size of prom_init after the patch: text data bss dec hex filename 12460 488 6960 19908 4dc4 arch/powerpc/kernel/prom_init.o This increases the size of prom_init a bit, but as prom_init is in __init section, it is freed after boot anyway. Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/prom_init.c | 213 ++++++++++++++++++++++++++------- arch/powerpc/kernel/prom_init_check.sh | 2 +- 2 files changed, 173 insertions(+), 42 deletions(-) diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index f33ff4163a51..56d5639ab082 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c @@ -224,6 +224,137 @@ static bool __prombss rtas_has_query_cpu_stopped; #define PHANDLE_VALID(p) ((p) != 0 && (p) != PROM_ERROR) #define IHANDLE_VALID(i) ((i) != 0 && (i) != PROM_ERROR) +/* Copied from lib/string.c and lib/kstrtox.c */ + +static int __init prom_strcmp(const char *cs, const char *ct) +{ + unsigned char c1, c2; + + while (1) { + c1 = *cs++; + c2 = *ct++; + if (c1 != c2) + return c1 < c2 ? -1 : 1; + if (!c1) + break; + } + return 0; +} + +static char __init *prom_strcpy(char *dest, const char *src) +{ + char *tmp = dest; + + while ((*dest++ = *src++) != '\0') + /* nothing */; + return tmp; +} + +static int __init prom_strncmp(const char *cs, const char *ct, size_t count) +{ + unsigned char c1, c2; + + while (count) { + c1 = *cs++; + c2 = *ct++; + if (c1 != c2) + return c1 < c2 ? -1 : 1; + if (!c1) + break; + count--; + } + return 0; +} + +static size_t __init prom_strlen(const char *s) +{ + const char *sc; + + for (sc = s; *sc != '\0'; ++sc) + /* nothing */; + return sc - s; +} + +static int __init prom_memcmp(const void *cs, const void *ct, size_t count) +{ + const unsigned char *su1, *su2; + int res = 0; + + for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) + if ((res = *su1 - *su2) != 0) + break; + return res; +} + +static char __init *prom_strstr(const char *s1, const char *s2) +{ + size_t l1, l2; + + l2 = prom_strlen(s2); + if (!l2) + return (char *)s1; + l1 = prom_strlen(s1); + while (l1 >= l2) { + l1--; + if (!prom_memcmp(s1, s2, l2)) + return (char *)s1; + s1++; + } + return NULL; +} + +#ifdef CONFIG_CMDLINE +static size_t __init prom_strlcpy(char *dest, const char *src, size_t size) +{ + size_t ret = prom_strlen(src); + + if (size) { + size_t len = (ret >= size) ? size - 1 : ret; + memcpy(dest, src, len); + dest[len] = '\0'; + } + return ret; +} +#endif + +#ifdef CONFIG_PPC_PSERIES +static int __init prom_strtobool(const char *s, bool *res) +{ + if (!s) + return -EINVAL; + + switch (s[0]) { + case 'y': + case 'Y': + case '1': + *res = true; + return 0; + case 'n': + case 'N': + case '0': + *res = false; + return 0; + case 'o': + case 'O': + switch (s[1]) { + case 'n': + case 'N': + *res = true; + return 0; + case 'f': + case 'F': + *res = false; + return 0; + default: + break; + } + default: + break; + } + + return -EINVAL; +} +#endif /* This is the one and *ONLY* place where we actually call open * firmware. @@ -555,7 +686,7 @@ static int __init prom_setprop(phandle node, const char *nodename, add_string(&p, tohex((u32)(unsigned long) value)); add_string(&p, tohex(valuelen)); add_string(&p, tohex(ADDR(pname))); - add_string(&p, tohex(strlen(pname))); + add_string(&p, tohex(prom_strlen(pname))); add_string(&p, "property"); *p = 0; return call_prom("interpret", 1, 1, (u32)(unsigned long) cmd); @@ -639,25 +770,25 @@ static void __init early_cmdline_parse(void) l = prom_getprop(prom.chosen, "bootargs", p, COMMAND_LINE_SIZE-1); #ifdef CONFIG_CMDLINE if (l <= 0 || p[0] == '\0') /* dbl check */ - strlcpy(prom_cmd_line, + prom_strlcpy(prom_cmd_line, CONFIG_CMDLINE, sizeof(prom_cmd_line)); #endif /* CONFIG_CMDLINE */ prom_printf("command line: %s\n", prom_cmd_line); #ifdef CONFIG_PPC64 - opt = strstr(prom_cmd_line, "iommu="); + opt = prom_strstr(prom_cmd_line, "iommu="); if (opt) { prom_printf("iommu opt is: %s\n", opt); opt += 6; while (*opt && *opt == ' ') opt++; - if (!strncmp(opt, "off", 3)) + if (!prom_strncmp(opt, "off", 3)) prom_iommu_off = 1; - else if (!strncmp(opt, "force", 5)) + else if (!prom_strncmp(opt, "force", 5)) prom_iommu_force_on = 1; } #endif - opt = strstr(prom_cmd_line, "mem="); + opt = prom_strstr(prom_cmd_line, "mem="); if (opt) { opt += 4; prom_memory_limit = prom_memparse(opt, (const char **)&opt); @@ -669,13 +800,13 @@ static void __init early_cmdline_parse(void) #ifdef CONFIG_PPC_PSERIES prom_radix_disable = !IS_ENABLED(CONFIG_PPC_RADIX_MMU_DEFAULT); - opt = strstr(prom_cmd_line, "disable_radix"); + opt = prom_strstr(prom_cmd_line, "disable_radix"); if (opt) { opt += 13; if (*opt && *opt == '=') { bool val; - if (kstrtobool(++opt, &val)) + if (prom_strtobool(++opt, &val)) prom_radix_disable = false; else prom_radix_disable = val; @@ -1028,7 +1159,7 @@ static int __init prom_count_smt_threads(void) type[0] = 0; prom_getprop(node, "device_type", type, sizeof(type)); - if (strcmp(type, "cpu")) + if (prom_strcmp(type, "cpu")) continue; /* * There is an entry for each smt thread, each entry being @@ -1475,7 +1606,7 @@ static void __init prom_init_mem(void) */ prom_getprop(node, "name", type, sizeof(type)); } - if (strcmp(type, "memory")) + if (prom_strcmp(type, "memory")) continue; plen = prom_getprop(node, "reg", regbuf, sizeof(regbuf)); @@ -1756,19 +1887,19 @@ static void __init prom_initialize_tce_table(void) prom_getprop(node, "device_type", type, sizeof(type)); prom_getprop(node, "model", model, sizeof(model)); - if ((type[0] == 0) || (strstr(type, "pci") == NULL)) + if ((type[0] == 0) || (prom_strstr(type, "pci") == NULL)) continue; /* Keep the old logic intact to avoid regression. */ if (compatible[0] != 0) { - if ((strstr(compatible, "python") == NULL) && - (strstr(compatible, "Speedwagon") == NULL) && - (strstr(compatible, "Winnipeg") == NULL)) + if ((prom_strstr(compatible, "python") == NULL) && + (prom_strstr(compatible, "Speedwagon") == NULL) && + (prom_strstr(compatible, "Winnipeg") == NULL)) continue; } else if (model[0] != 0) { - if ((strstr(model, "ython") == NULL) && - (strstr(model, "peedwagon") == NULL) && - (strstr(model, "innipeg") == NULL)) + if ((prom_strstr(model, "ython") == NULL) && + (prom_strstr(model, "peedwagon") == NULL) && + (prom_strstr(model, "innipeg") == NULL)) continue; } @@ -1917,12 +2048,12 @@ static void __init prom_hold_cpus(void) type[0] = 0; prom_getprop(node, "device_type", type, sizeof(type)); - if (strcmp(type, "cpu") != 0) + if (prom_strcmp(type, "cpu") != 0) continue; /* Skip non-configured cpus. */ if (prom_getprop(node, "status", type, sizeof(type)) > 0) - if (strcmp(type, "okay") != 0) + if (prom_strcmp(type, "okay") != 0) continue; reg = cpu_to_be32(-1); /* make sparse happy */ @@ -1998,9 +2129,9 @@ static void __init prom_find_mmu(void) return; version[sizeof(version) - 1] = 0; /* XXX might need to add other versions here */ - if (strcmp(version, "Open Firmware, 1.0.5") == 0) + if (prom_strcmp(version, "Open Firmware, 1.0.5") == 0) of_workarounds = OF_WA_CLAIM; - else if (strncmp(version, "FirmWorks,3.", 12) == 0) { + else if (prom_strncmp(version, "FirmWorks,3.", 12) == 0) { of_workarounds = OF_WA_CLAIM | OF_WA_LONGTRAIL; call_prom("interpret", 1, 1, "dev /memory 0 to allow-reclaim"); } else @@ -2033,7 +2164,7 @@ static void __init prom_init_stdout(void) call_prom("instance-to-path", 3, 1, prom.stdout, path, 255); prom_printf("OF stdout device is: %s\n", of_stdout_device); prom_setprop(prom.chosen, "/chosen", "linux,stdout-path", - path, strlen(path) + 1); + path, prom_strlen(path) + 1); /* instance-to-package fails on PA-Semi */ stdout_node = call_prom("instance-to-package", 1, 1, prom.stdout); @@ -2043,7 +2174,7 @@ static void __init prom_init_stdout(void) /* If it's a display, note it */ memset(type, 0, sizeof(type)); prom_getprop(stdout_node, "device_type", type, sizeof(type)); - if (strcmp(type, "display") == 0) + if (prom_strcmp(type, "display") == 0) prom_setprop(stdout_node, path, "linux,boot-display", NULL, 0); } } @@ -2064,19 +2195,19 @@ static int __init prom_find_machine_type(void) compat[len] = 0; while (i < len) { char *p = &compat[i]; - int sl = strlen(p); + int sl = prom_strlen(p); if (sl == 0) break; - if (strstr(p, "Power Macintosh") || - strstr(p, "MacRISC")) + if (prom_strstr(p, "Power Macintosh") || + prom_strstr(p, "MacRISC")) return PLATFORM_POWERMAC; #ifdef CONFIG_PPC64 /* We must make sure we don't detect the IBM Cell * blades as pSeries due to some firmware issues, * so we do it here. */ - if (strstr(p, "IBM,CBEA") || - strstr(p, "IBM,CPBW-1.0")) + if (prom_strstr(p, "IBM,CBEA") || + prom_strstr(p, "IBM,CPBW-1.0")) return PLATFORM_GENERIC; #endif /* CONFIG_PPC64 */ i += sl + 1; @@ -2093,7 +2224,7 @@ static int __init prom_find_machine_type(void) compat, sizeof(compat)-1); if (len <= 0) return PLATFORM_GENERIC; - if (strcmp(compat, "chrp")) + if (prom_strcmp(compat, "chrp")) return PLATFORM_GENERIC; /* Default to pSeries. We need to know if we are running LPAR */ @@ -2155,7 +2286,7 @@ static void __init prom_check_displays(void) for (node = 0; prom_next_node(&node); ) { memset(type, 0, sizeof(type)); prom_getprop(node, "device_type", type, sizeof(type)); - if (strcmp(type, "display") != 0) + if (prom_strcmp(type, "display") != 0) continue; /* It seems OF doesn't null-terminate the path :-( */ @@ -2259,9 +2390,9 @@ static unsigned long __init dt_find_string(char *str) s = os = (char *)dt_string_start; s += 4; while (s < (char *)dt_string_end) { - if (strcmp(s, str) == 0) + if (prom_strcmp(s, str) == 0) return s - os; - s += strlen(s) + 1; + s += prom_strlen(s) + 1; } return 0; } @@ -2294,7 +2425,7 @@ static void __init scan_dt_build_strings(phandle node, } /* skip "name" */ - if (strcmp(namep, "name") == 0) { + if (prom_strcmp(namep, "name") == 0) { *mem_start = (unsigned long)namep; prev_name = "name"; continue; @@ -2306,7 +2437,7 @@ static void __init scan_dt_build_strings(phandle node, namep = sstart + soff; } else { /* Trim off some if we can */ - *mem_start = (unsigned long)namep + strlen(namep) + 1; + *mem_start = (unsigned long)namep + prom_strlen(namep) + 1; dt_string_end = *mem_start; } prev_name = namep; @@ -2375,7 +2506,7 @@ static void __init scan_dt_build_struct(phandle node, unsigned long *mem_start, break; /* skip "name" */ - if (strcmp(pname, "name") == 0) { + if (prom_strcmp(pname, "name") == 0) { prev_name = "name"; continue; } @@ -2406,7 +2537,7 @@ static void __init scan_dt_build_struct(phandle node, unsigned long *mem_start, call_prom("getprop", 4, 1, node, pname, valp, l); *mem_start = _ALIGN(*mem_start, 4); - if (!strcmp(pname, "phandle")) + if (!prom_strcmp(pname, "phandle")) has_phandle = 1; } @@ -2476,8 +2607,8 @@ static void __init flatten_device_tree(void) /* Add "phandle" in there, we'll need it */ namep = make_room(&mem_start, &mem_end, 16, 1); - strcpy(namep, "phandle"); - mem_start = (unsigned long)namep + strlen(namep) + 1; + prom_strcpy(namep, "phandle"); + mem_start = (unsigned long)namep + prom_strlen(namep) + 1; /* Build string array */ prom_printf("Building dt strings...\n"); @@ -2799,7 +2930,7 @@ static void __init fixup_device_tree_efika(void) rv = prom_getprop(node, "model", prop, sizeof(prop)); if (rv == PROM_ERROR) return; - if (strcmp(prop, "EFIKA5K2")) + if (prom_strcmp(prop, "EFIKA5K2")) return; prom_printf("Applying EFIKA device tree fixups\n"); @@ -2807,13 +2938,13 @@ static void __init fixup_device_tree_efika(void) /* Claiming to be 'chrp' is death */ node = call_prom("finddevice", 1, 1, ADDR("/")); rv = prom_getprop(node, "device_type", prop, sizeof(prop)); - if (rv != PROM_ERROR && (strcmp(prop, "chrp") == 0)) + if (rv != PROM_ERROR && (prom_strcmp(prop, "chrp") == 0)) prom_setprop(node, "/", "device_type", "efika", sizeof("efika")); /* CODEGEN,description is exposed in /proc/cpuinfo so fix that too */ rv = prom_getprop(node, "CODEGEN,description", prop, sizeof(prop)); - if (rv != PROM_ERROR && (strstr(prop, "CHRP"))) + if (rv != PROM_ERROR && (prom_strstr(prop, "CHRP"))) prom_setprop(node, "/", "CODEGEN,description", "Efika 5200B PowerPC System", sizeof("Efika 5200B PowerPC System")); diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh index 181fd10008ef..4cac45cb5de5 100644 --- a/arch/powerpc/kernel/prom_init_check.sh +++ b/arch/powerpc/kernel/prom_init_check.sh @@ -27,7 +27,7 @@ fi WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush _end enter_prom $MEM_FUNCS reloc_offset __secondary_hold __secondary_hold_acknowledge __secondary_hold_spinloop __start -strcmp strcpy strlcpy strlen strncmp strstr kstrtobool logo_linux_clut224 +logo_linux_clut224 reloc_got2 kernstart_addr memstart_addr linux_banner _stext __prom_init_toc_start __prom_init_toc_end btext_setup_display TOC." From patchwork Tue Feb 26 17:22:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830653 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5A9CD13B5 for ; Tue, 26 Feb 2019 17:22:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 403922D3E7 for ; Tue, 26 Feb 2019 17:22:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 344FA2D3D2; Tue, 26 Feb 2019 17:22:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D6882D388 for ; Tue, 26 Feb 2019 17:22:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 80B6F8E0007; Tue, 26 Feb 2019 12:22:48 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 740898E0003; Tue, 26 Feb 2019 12:22:48 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5BB048E0007; Tue, 26 Feb 2019 12:22:48 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by kanga.kvack.org (Postfix) with ESMTP id F1FF08E0003 for ; Tue, 26 Feb 2019 12:22:47 -0500 (EST) Received: by mail-wm1-f72.google.com with SMTP id t133so710534wmg.4 for ; Tue, 26 Feb 2019 09:22:47 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=g6fhwCUzzCOYhxsR7m9Lo9kcYtSGDH5kmO2yLp27uXY=; b=VYkyFY7n6fvApIBGBaUbhqc42HFsAhBl/CogJ2QgUG8PyAOLLi8Bu9z3nm5K87fOj6 1IPd+GC/1MPAhFcUqCk532L8n/EkI8pGYU5L3QV7t+j9gs8dRR4MHVWbY6WXO14WEXxI ucbjxF+nnE12uvSSLKryn80uwouNOizIKku5otGBR0sm9sSJBgAZ3Kiq9PN+my6XEFnn LLh0QMzZ6uBORWwbZRe9iHRtUXyHFEWYqNOfhxPvLS0ec+lZfcST2VreWmfit4BVmXJ3 0mM4IEdvugQ0Fk8GQ++07tw0r3vaeZ3e2zq7nfV7x8SZ23kKFM3MtmsbpdA0HQN0XIHJ +UUg== X-Gm-Message-State: AHQUAuZVAGep+QMWqtBuPHvpeXlmsG6viE/rVj/ESqLlrdAl3ExA448o p84E9BK8M6Ty0iZQLc2Wjbkvouhkj2W9CU4W0zpcb3itSwjYHsfXzWTzv1UVTG9nE3KdLi2mxw4 dZYByAcc36xC1tov9Fklqp7LHTok8EGjx44FyHxaZ3TpBTQFHh3KiwC7Lh1rJ9XC78Q== X-Received: by 2002:a1c:2743:: with SMTP id n64mr3585958wmn.143.1551201767518; Tue, 26 Feb 2019 09:22:47 -0800 (PST) X-Google-Smtp-Source: AHgI3IYmY5HTOgDtqV1Pp+0wp9qiwxuSaffaQ9yk6IaKGAfgqMmogN0XakajTrsCJhttuaBSx2q6 X-Received: by 2002:a1c:2743:: with SMTP id n64mr3585911wmn.143.1551201766390; Tue, 26 Feb 2019 09:22:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201766; cv=none; d=google.com; s=arc-20160816; b=PsqfBV/mrZJsUZJPcNzetyd4WaKXkwRmb+uaYXcG+ga7d20boQ7D9i9YKm8fWNn5EL k3e/HcOnVpkTfpHkYjo/q7OpP/gMJAd4Jbz8d8jWcR8VlBuXjevfqLUvvAcLoxk4HFu9 X81hZ9bulkvHlLlUUxsqNf94CJXc9LWyy7Gbe/6NK6fJSpgrnBCRw+RyioEXIzaazhhu T/OI6Q+MAoZZ4KGcogpQ3qfT2I/5wDYtWbCDtpZDvt7BGu13sryOrXdNcJs7SSaq09Wc WBMlSU71zjX1C/ALwMwn56yjw3nMPyFtEmmxJdMOjbhwg010g7mLO9nMIzdrLtoUFsfa cLWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=g6fhwCUzzCOYhxsR7m9Lo9kcYtSGDH5kmO2yLp27uXY=; b=i7diXIKNoqbtHdXF3TM/D7kb41huraktdrGn3cLjQwBMnlyv5jpE94EkxbNAcwhFhq JIbxm/zsetZ44eILZ6sHSmQdDw5Lfff1GXQqBRvJ4mKkQiFiUDWEXEOI6lKbMiyvfXEF Mf2J0yXUQ/GCl6wcs6bYVsRY2AY2u0VlZD7zvoEKFLlSsMMBGGQqgEiH82EWn1erEQcO 2H1DQlferDo4kshEaUsw06NnCZmtYlJO4zgL0+g7JUHybtlu9ukCke+ppkC+kjhTP2ao /ZTdHcFsShuq8H7XZas7Hj8ngAO5CZzJM0PYDwgu+LYV2ax8TbnXdBkY31ITfbjCDGOg iCzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=ti1gVhxy; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id h65si9035506wmg.67.2019.02.26.09.22.46 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:46 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=ti1gVhxy; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485H81cRnz9vJLf; Tue, 26 Feb 2019 18:22:44 +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=ti1gVhxy; 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 YOx664-dutKR; Tue, 26 Feb 2019 18:22:44 +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 4485H80QF9z9vJLY; Tue, 26 Feb 2019 18:22:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201764; bh=g6fhwCUzzCOYhxsR7m9Lo9kcYtSGDH5kmO2yLp27uXY=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=ti1gVhxyHR1EvrNdR4KPf3SZ+OfMqvO5xQo4KDWAttWKHQctabiTkPCjAmwXBDInv 43t2J8BJYVHmrr1aVPUuxFMair+woIM74TbrxfjfUGnjIuy7vWaDCmnC+GeNapRCx+ 1/aq0Z4u+d8SVSJtWwtfNNE30GRtJLC6KEwtHst0= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A87DD8B97A; Tue, 26 Feb 2019 18:22:45 +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 wssN5870d0AG; Tue, 26 Feb 2019 18:22:45 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 6DBB28B96A; Tue, 26 Feb 2019 18:22:45 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 4DA666F7B5; Tue, 26 Feb 2019 17:22:45 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 04/11] powerpc/mm: don't use direct assignation during early boot. To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:45 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP In kernel/cputable.c, explicitly use memcpy() instead of *y = *x; This will allow GCC to replace it with __memcpy() when KASAN is selected. Acked-by: Dmitry Vyukov Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/cputable.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 1eab54bc6ee9..cd12f362b61f 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c @@ -2147,7 +2147,11 @@ void __init set_cur_cpu_spec(struct cpu_spec *s) struct cpu_spec *t = &the_cpu_spec; t = PTRRELOC(t); - *t = *s; + /* + * use memcpy() instead of *t = *s so that GCC replaces it + * by __memcpy() when KASAN is active + */ + memcpy(t, s, sizeof(*t)); *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec; } @@ -2161,8 +2165,11 @@ static struct cpu_spec * __init setup_cpu_spec(unsigned long offset, t = PTRRELOC(t); old = *t; - /* Copy everything, then do fixups */ - *t = *s; + /* + * Copy everything, then do fixups. Use memcpy() instead of *t = *s + * so that GCC replaces it by __memcpy() when KASAN is active + */ + memcpy(t, s, sizeof(*t)); /* * If we are overriding a previous value derived from the real From patchwork Tue Feb 26 17:22:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830655 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6328017E6 for ; Tue, 26 Feb 2019 17:23:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 42DB72D416 for ; Tue, 26 Feb 2019 17:23:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 323232D3D2; Tue, 26 Feb 2019 17:23:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CF0F02D416 for ; Tue, 26 Feb 2019 17:22:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6864E8E0008; Tue, 26 Feb 2019 12:22:49 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 598AF8E0003; Tue, 26 Feb 2019 12:22:49 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3E8368E0008; Tue, 26 Feb 2019 12:22:49 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by kanga.kvack.org (Postfix) with ESMTP id D41388E0003 for ; Tue, 26 Feb 2019 12:22:48 -0500 (EST) Received: by mail-wr1-f69.google.com with SMTP id t7so6495313wrw.8 for ; Tue, 26 Feb 2019 09:22:48 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=FcoH0MWZdtOBuC7W/yk0A9+bmiNTMQTCcIimrSkyq24=; b=qXDrtvQjfWA5a2f4ZkpNzDmVZ1g1SwJhAniNijhrfL5GKwbiQPP+vMGhmJgE3cJCBA UsNiDnI9rVxEu+DdxmWaTvxdkHtiRAmGUO6qlNDXuqM1P7IPfrgXeOw2kbYMLUfCWDGb NiRV8nFv6LIAbfKl2QLMAqtNEgPC0240TosfqhjsC9z/5tAeqoeK2Rl/Cdi8twRn8cmm duueDkK+zqwSACpQNAHhxf82KQZGYfZ5+WI4EDA3Q2YoDmUrSj/T/QpMy8iupEO71jGd IC1nVzktDyX4K0eLN3G2ZERaWWWjE3BYtIBn6iuUlGj9STo6sAw5WUo4iTBwXAQUEtsN qPsg== X-Gm-Message-State: AHQUAua8Vut/f2hZbL0jFV+0GHkkCf/lVvkh0orLK0jK1Wd67q/l9Qqx mKfY4t2OR0JAWKyg+UUSUJ5r1TSgcJ0Ah2iWhNqkSeUKVZbKfeIWdpZ+FMpabphWHceRY1RxQwP N7I+a0dwjppFgMReBcFNsJPfXEvdYW4QBHrwuaTSiNA4a+GzA/UYbqa6ZMMxW7FP/yQ== X-Received: by 2002:a1c:47:: with SMTP id 68mr3220313wma.89.1551201768396; Tue, 26 Feb 2019 09:22:48 -0800 (PST) X-Google-Smtp-Source: AHgI3IaKRMfbxTfuLYQmkYSMPwDvoh7+8E1HDBvfAZcdm7U+FaFS4NJz0jv/4VwMNwZ6xiTkySSR X-Received: by 2002:a1c:47:: with SMTP id 68mr3220261wma.89.1551201767329; Tue, 26 Feb 2019 09:22:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201767; cv=none; d=google.com; s=arc-20160816; b=ad16yKJmschM3qp4IZe8cPJVh7yHF7Nh+5OZCjrXSiO8T38yyW3BS7tO97yNZH1cS5 RzLGcuM8a8xoY/voYZ0cEac9n4QFaTMw37d47pQS7t1EBTXUcLz1jtTlNZVfZs2eECTX EZLwXBb1bvtvSftOJFgvNNv3dGC5B5EULrDAL0TedrUC2QVQmiRoTD4Mck0Fj8ajJqwc WmBF5rGW/p3pNmwb3qIq8RolHWx9ydUmJwMnIgWXxR/42TRBtTwe3ztNqlxnoOR8ZgDB UMdid7MjqUpbljbruEsjtqSxUAgXCWyPh0zMQr7kbDVj/9nsO9EcwKsmbQi7iypowI8O raHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=FcoH0MWZdtOBuC7W/yk0A9+bmiNTMQTCcIimrSkyq24=; b=tEYpWJcF0YM2+MfuP6ASPdxr3mdfnG+vyZE1zq6TE1ELHLzz5+7xOpxnzo+gB4C+tz ICk+4L2am7s8e8hflP6zaKdTUW33j5Zv+yZTrkzV8NkmsHattmxrISL7nuwdNMY7cKO0 LqqHGDG/CcoE+Peu6VJM99RFN9BG7T8EAOSPjLkPa2eavlwnElvN7AcEWeSZe5EFfCOh 7Sxi3LsFzxOg+hCj0sMMgwq3wgjZTZ3n9yNwzJAOPhxhT5C+4IeIdpDIWeEGUQE5MjGK x8ixVmFo6938N44KuAQtE7O9E5AICJlS6VZqyhCkVln8AdXkYlt/XtT68CRNvc/Hy3tL JHvQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=mRdRp2Md; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id h19si7411725wme.135.2019.02.26.09.22.47 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:47 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=mRdRp2Md; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485H91FHmz9vJLg; Tue, 26 Feb 2019 18:22:45 +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=mRdRp2Md; 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 wa7NW71wC-7A; Tue, 26 Feb 2019 18:22:45 +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 4485H904tZz9vJLY; Tue, 26 Feb 2019 18:22:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201765; bh=FcoH0MWZdtOBuC7W/yk0A9+bmiNTMQTCcIimrSkyq24=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=mRdRp2MdqDKy+WcWi0yf/hvgeunwSNaUNZRmJXDfhiptnSXfjnhPQlxjOufdkz95F vXE+KzumvvSQSWGXsC65s/KS4xrg4UgiqBsMiU3Uk9SMp8doRCpGTtj1KdnBDZPkhy RDiHK8KyftY40FwP1do3dfd6tUfQxPSR2z3WfXA4= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A47F08B97A; Tue, 26 Feb 2019 18:22:46 +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 IgOg4aQV0MSY; Tue, 26 Feb 2019 18:22:46 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 741138B96A; Tue, 26 Feb 2019 18:22:46 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 52C196F7B5; Tue, 26 Feb 2019 17:22:46 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 05/11] powerpc/32: use memset() instead of memset_io() to zero BSS To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:46 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP Since commit 400c47d81ca38 ("powerpc32: memset: only use dcbz once cache is enabled"), memset() can be used before activation of the cache, so no need to use memset_io() for zeroing the BSS. Acked-by: Dmitry Vyukov Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/early_32.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/kernel/early_32.c b/arch/powerpc/kernel/early_32.c index cf3cdd81dc47..3482118ffe76 100644 --- a/arch/powerpc/kernel/early_32.c +++ b/arch/powerpc/kernel/early_32.c @@ -21,8 +21,8 @@ notrace unsigned long __init early_init(unsigned long dt_ptr) { unsigned long offset = reloc_offset(); - /* First zero the BSS -- use memset_io, some platforms don't have caches on yet */ - memset_io((void __iomem *)PTRRELOC(&__bss_start), 0, __bss_stop - __bss_start); + /* First zero the BSS */ + memset(PTRRELOC(&__bss_start), 0, __bss_stop - __bss_start); /* * Identify the CPU type and fix up code sections From patchwork Tue Feb 26 17:22:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830657 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5B47C17E6 for ; Tue, 26 Feb 2019 17:23:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3F4282D2E9 for ; Tue, 26 Feb 2019 17:23:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 328D52D388; Tue, 26 Feb 2019 17:23:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 95C362D2E9 for ; Tue, 26 Feb 2019 17:23:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AC6B18E0009; Tue, 26 Feb 2019 12:22:50 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id A288A8E0003; Tue, 26 Feb 2019 12:22:50 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 87DE68E0009; Tue, 26 Feb 2019 12:22:50 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by kanga.kvack.org (Postfix) with ESMTP id 24EC08E0003 for ; Tue, 26 Feb 2019 12:22:50 -0500 (EST) Received: by mail-wm1-f71.google.com with SMTP id n12so712724wmc.2 for ; Tue, 26 Feb 2019 09:22:50 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=T5roomQKloe+Cr1IT+Xg0/TzN2EQ/rbW1mXIN5nYL+c=; b=CqDtb1+8nRjxNoPiPUc2rzRw0mHCp9D/7I17QyXs6SUsFmI9LoNKeoeOpZaUfRnFo8 /CT23tDEQKlZTtNvBkkYXK9Z/bmYBNMD8eJZL/cAcL6UJPFpKFV4WX7GYBOekBNxmVjd lUxLmAsZhxR1IMgOHvc+GcGJOewnUEexgR5NtLFatidJZ+09GnEwObGHlUtPHrspxY1G mNV4kyU+e5bs5ekBfpncoOUdqm29itLLAggd1cJMqn/1KzfDlh5AGcFTIIXWiPbwPO48 r8mrjnscTP51OEXbno90F+I1Ix666XqrSqVqAxkNMCqbynfOUE11eITuRqSKtj0Wz4vd KAtA== X-Gm-Message-State: AHQUAua0JmNmfxKz1SREXGbysc7m2qHUbi1PolHE6mrOImbpkpuNILOk yFPvdUG8UaIDmIsKv1i3gXF0+OaK8zFtNcBbL0VzRepMv9KIwbuHdFUKAU4djXXikypGeVwtlgq n6SB65+63O6MZabtvse683oRtXMJ4TTOa91sIVngpgbs9IFW5aSufinCAfM+rSawjIA== X-Received: by 2002:a1c:f011:: with SMTP id a17mr3273863wmb.89.1551201769661; Tue, 26 Feb 2019 09:22:49 -0800 (PST) X-Google-Smtp-Source: AHgI3IaPOhlDSSyCovJ3xkUQdtxKMv9ppY0d6ixfm7tvRW300V1/gslmv/9RNkWbWhwsgu9lSdyu X-Received: by 2002:a1c:f011:: with SMTP id a17mr3273813wmb.89.1551201768605; Tue, 26 Feb 2019 09:22:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201768; cv=none; d=google.com; s=arc-20160816; b=yYyyBF6Oxz4xAC+reDUoiugJlVBX+o6AvKS6RlKYIAO1Pn6FBg+xvdFYxRHapSofjY xrskBXHncR5+dnZZs+3AbsHWb0qi/j/euM8xvGOkuQZ19RMROrEdF665+FxxuBHNmbDi 4oULccs449sUQGmWBO4WNJEURcGJH4T6c9VanJOZuHU3OudWWH9MrqX8Qhs0VPmPHFVC CT/E+LwY0EXOq3q048hflI1NjvHwHe/ZSIJJpJnABmMorR29e4fxBFtKobls6mnGtL28 xBt/nMxOAZjQYxKrsXMdKvcWH+AjzA/igybo967jcPxWiocDx4TFCxrySZyjF9AivhNc qA+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=T5roomQKloe+Cr1IT+Xg0/TzN2EQ/rbW1mXIN5nYL+c=; b=T5BYZ0b3+LX4L3J8ro+UMO+OFV01+pFHcHQstDGPm3eowkqNJ5bwf4LjDG7DDaWjtK qwhIQ3inif07gMT8cMGYmbehJi1ZMVED6UexpiOl/XCe58Wh9msSi97zs9wP8mWaYuXr 56l6K+zQmlrpgrsvUQq08BMhLIpdgl6qrSYy/rp6Mi/d6Fj2dRyQ0PuxriaIzs42SZ3c gYRO0bF+t2EtZS9c5on4TpBjemkW/S/6erAID5l91B9pnCFZtFVSZZShlnKkwfkDR0ye GnxZsoC25sDxFVwzlYQBFEJaDa/OxQ0iqETtwG3XlRTmeWQWkbgd6ni6l3zqnxidXouS 9sGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=rNHXO1mN; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id v7si8815764wrw.312.2019.02.26.09.22.48 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:48 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=rNHXO1mN; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485HB2tbLz9vJLh; Tue, 26 Feb 2019 18:22:46 +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=rNHXO1mN; 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 Lz3Mvh_-1mNd; Tue, 26 Feb 2019 18:22:46 +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 4485HB1frfz9vJLY; Tue, 26 Feb 2019 18:22:46 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201766; bh=T5roomQKloe+Cr1IT+Xg0/TzN2EQ/rbW1mXIN5nYL+c=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=rNHXO1mNgSm6WOxlfqgdYv6AHdpqgKOl9JSU5H/US/o8ln8L7ilUrpGl8DuiGqCMd kYcaKvMmjD7aPj7GYIeHsEeSztlQAxmJ0UVTJqwWtkWkGI68s6qbrKzWbw5b6vwzXr AKd53PcunRUychYDbcFaQeoICHnZPIYkAgUhP8sc= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id BE63D8B97C; Tue, 26 Feb 2019 18:22:47 +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 2rviB2LY8cFU; Tue, 26 Feb 2019 18:22:47 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 7C6868B96A; Tue, 26 Feb 2019 18:22:47 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 5949B6F7A6; Tue, 26 Feb 2019 17:22:47 +0000 (UTC) Message-Id: <8193c76acf453687f4479afb4ecbbba37fca2da6.1551161392.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 06/11] powerpc/32: make KVIRT_TOP dependent on FIXMAP_START To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:47 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP When we add KASAN shadow area, KVIRT_TOP can't be anymore fixed at 0xfe000000. This patch uses FIXADDR_START to define KVIRT_TOP. Signed-off-by: Christophe Leroy --- arch/powerpc/include/asm/book3s/32/pgtable.h | 13 ++++++++++--- arch/powerpc/include/asm/nohash/32/pgtable.h | 13 ++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/32/pgtable.h b/arch/powerpc/include/asm/book3s/32/pgtable.h index aa8406b8f7ba..838de59f6754 100644 --- a/arch/powerpc/include/asm/book3s/32/pgtable.h +++ b/arch/powerpc/include/asm/book3s/32/pgtable.h @@ -134,15 +134,24 @@ static inline bool pte_user(pte_t pte) #define PGDIR_MASK (~(PGDIR_SIZE-1)) #define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE) + +#ifndef __ASSEMBLY__ + +int map_kernel_page(unsigned long va, phys_addr_t pa, pgprot_t prot); + +#endif /* !__ASSEMBLY__ */ + /* * This is the bottom of the PKMAP area with HIGHMEM or an arbitrary * value (for now) on others, from where we can start layout kernel * virtual space that goes below PKMAP and FIXMAP */ +#include + #ifdef CONFIG_HIGHMEM #define KVIRT_TOP PKMAP_BASE #else -#define KVIRT_TOP (0xfe000000UL) /* for now, could be FIXMAP_BASE ? */ +#define KVIRT_TOP FIXADDR_START #endif /* @@ -373,8 +382,6 @@ static inline void __ptep_set_access_flags(struct vm_area_struct *vma, #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 3 }) #define __swp_entry_to_pte(x) ((pte_t) { (x).val << 3 }) -int map_kernel_page(unsigned long va, phys_addr_t pa, pgprot_t prot); - /* Generic accessors to PTE bits */ static inline int pte_write(pte_t pte) { return !!(pte_val(pte) & _PAGE_RW);} static inline int pte_read(pte_t pte) { return 1; } diff --git a/arch/powerpc/include/asm/nohash/32/pgtable.h b/arch/powerpc/include/asm/nohash/32/pgtable.h index bed433358260..0284f8f5305f 100644 --- a/arch/powerpc/include/asm/nohash/32/pgtable.h +++ b/arch/powerpc/include/asm/nohash/32/pgtable.h @@ -64,15 +64,24 @@ extern int icache_44x_need_flush; #define pgd_ERROR(e) \ pr_err("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) +#ifndef __ASSEMBLY__ + +int map_kernel_page(unsigned long va, phys_addr_t pa, pgprot_t prot); + +#endif /* !__ASSEMBLY__ */ + + /* * This is the bottom of the PKMAP area with HIGHMEM or an arbitrary * value (for now) on others, from where we can start layout kernel * virtual space that goes below PKMAP and FIXMAP */ +#include + #ifdef CONFIG_HIGHMEM #define KVIRT_TOP PKMAP_BASE #else -#define KVIRT_TOP (0xfe000000UL) /* for now, could be FIXMAP_BASE ? */ +#define KVIRT_TOP FIXADDR_START #endif /* @@ -379,8 +388,6 @@ static inline int pte_young(pte_t pte) #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> 3 }) #define __swp_entry_to_pte(x) ((pte_t) { (x).val << 3 }) -int map_kernel_page(unsigned long va, phys_addr_t pa, pgprot_t prot); - #endif /* !__ASSEMBLY__ */ #endif /* __ASM_POWERPC_NOHASH_32_PGTABLE_H */ From patchwork Tue Feb 26 17:22:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830659 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B166613B5 for ; Tue, 26 Feb 2019 17:23:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9570F2D2E9 for ; Tue, 26 Feb 2019 17:23:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 898F02D388; Tue, 26 Feb 2019 17:23:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0A6852D2E9 for ; Tue, 26 Feb 2019 17:23:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E74118E000C; Tue, 26 Feb 2019 12:22:52 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id D60C98E0003; Tue, 26 Feb 2019 12:22:52 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B3CC08E000B; Tue, 26 Feb 2019 12:22:52 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by kanga.kvack.org (Postfix) with ESMTP id 57E948E000A for ; Tue, 26 Feb 2019 12:22:52 -0500 (EST) Received: by mail-wr1-f70.google.com with SMTP id e18so6555501wrw.10 for ; Tue, 26 Feb 2019 09:22:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=9WWLsnNzNQXN6uyA4WXOLTkM/MttJFdvvbgAI1QArIs=; b=DVuQaQULDVjS1O5nU8jNWXXCNBqLVGZb1xNXxHMFCRd5zzlEMFXIIFensTLa01AFnL Ra7cNfd7nXS8ZU52JxwnxuiA1HpF8PP/+CFjWoShIIKOJvzIJMzHYT/tqL++sks4TG48 Az4oK9XjW1afTt0IMnRY6yFltm8pGUrVLv8R/gE07GTFLll61S8uyse/hEZB8ou5Mt4V Fdck/6SlIW2JBnBHWv2Sm2monqtm1cNJpgPsxj6f2GtnK1MBtP6iN6b5+RvPkmbMy0Ww c15+Eo+cSZ4VLfuhdy/EYWs46iwehz7LuyztoqnNROD7mHgzqKsiOJs3x5vkv/iD9SI/ W0Qw== X-Gm-Message-State: AHQUAuYwlBBpl6ZbUeZNnXXaTAChkG2Nde5RmgwKh3Sr5+hR5hyQHe5Y bKX/YQNDsCQViuBOjJbBOu1umll0GlKoNA8RzHQbaApe9VH9njxmDXTTyZnNv1MHKii78CquBQV RUslXnou+t4zYnrL0/MIOoMK1uf/NplArMdeTfeuXVL0hrxjNgom0/BCINvWnN4Ddpg== X-Received: by 2002:adf:f80e:: with SMTP id s14mr17715908wrp.327.1551201771872; Tue, 26 Feb 2019 09:22:51 -0800 (PST) X-Google-Smtp-Source: AHgI3IY3N+iMGwAX5FE3UluoFejmaPRnceCAYf3RRhUNf/k76NUb/smp7AJvRMkYm4wuAlP2OHGE X-Received: by 2002:adf:f80e:: with SMTP id s14mr17715859wrp.327.1551201771004; Tue, 26 Feb 2019 09:22:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201771; cv=none; d=google.com; s=arc-20160816; b=OQawb5dY15xygLC4BdwEPTWD3TMKODs6c94EKZ1W+OefUz9yVmcqvz7mN7h4dj/ZXg N/vYtxsSc/AwCF423C53hs8rmCzinHxDWPZPexW8nE+07n1g59xTj5P0KRw0PRwypg/0 Ny+3AHtELZIZnie3dKwoS18t9eGt53sfI41OIxQBCUQ+OujnxP1tKWIEX1TQ1wkh68gC GfrIp+BU8C8WNLSHH8NhN12TqWLUy8oO5NcnGpJ7n4whvIt8FUDDLMfySaeEJE64E7dP gq1kFRe1rqdd9NnUtftEJcWxogmhrRtLk0z9aMjpW0p8n//YowBTIon+xd3FufJS1URO m+5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=9WWLsnNzNQXN6uyA4WXOLTkM/MttJFdvvbgAI1QArIs=; b=uuiHinhtxQvF8B0BSy5Bc5ShD5Z6+g/kaPBvqnl5vOi2sj5U4MDkHO+mGcXrutuq6E SGtrRuLXBv0XBO1BCYrRvy+9Y8c3WCV03r12arjS3I2H1hUSbSUh2VAcTGvKD0JZk0/v GVjT++3XmA+Okz06GcayGWukE4/iaaxuRRXVXpmjryfLFGpAK3DhHy1uI99NxjnvSfN/ Uvz/pQ/XwPPfYXEWLnR3/+OTQIyAgpvQzgC5Gp2WvyRfXLizXj6QjTHH9u4nMB9w4yfv ObPKfvS50GIAuGsxfkA/yeVu+FUVl5sTJhtm4ktMtQLo24hG+Goht5pLjy2V8JswWdfG y+1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=Nwupw03o; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id c22si8369419wre.159.2019.02.26.09.22.50 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:50 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=Nwupw03o; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485HC2fnwz9vJLj; Tue, 26 Feb 2019 18:22:47 +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=Nwupw03o; 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 E1hUwubnfJlW; Tue, 26 Feb 2019 18:22:47 +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 4485HC1WXpz9vJLY; Tue, 26 Feb 2019 18:22:47 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201767; bh=9WWLsnNzNQXN6uyA4WXOLTkM/MttJFdvvbgAI1QArIs=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=Nwupw03oUS/8fLp0zsWXuErryzFh5FbVDw5GdLgHv1vV9rwEo/acx2wNvSCyoDA/t 2gBq4GVi86PculPVL/CT5wwmP08X9pHzrSn180cIkGTBffmHWDbTPoytXRRy24YEU5 jvw5Hp1CYh9gblwKamKQSCa5LkVYUOtfIiBIedbg= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id CFF6C8B97A; Tue, 26 Feb 2019 18:22:48 +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 o3Hu4eQBWEVD; Tue, 26 Feb 2019 18:22:48 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 8512A8B96A; Tue, 26 Feb 2019 18:22:48 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 5F07B6F7A6; Tue, 26 Feb 2019 17:22:48 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 07/11] powerpc/32: prepare shadow area for KASAN To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:48 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP This patch prepares a shadow area for KASAN. The shadow area will be at the top of the kernel virtual memory space above the fixmap area and will occupy one eighth of the total kernel virtual memory space. Signed-off-by: Christophe Leroy --- arch/powerpc/Kconfig.debug | 5 +++++ arch/powerpc/include/asm/fixmap.h | 5 +++++ arch/powerpc/include/asm/kasan.h | 16 ++++++++++++++++ arch/powerpc/mm/mem.c | 4 ++++ arch/powerpc/mm/ptdump/ptdump.c | 8 ++++++++ 5 files changed, 38 insertions(+) diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug index 4e00cb0a5464..61febbbdd02b 100644 --- a/arch/powerpc/Kconfig.debug +++ b/arch/powerpc/Kconfig.debug @@ -366,3 +366,8 @@ config PPC_FAST_ENDIAN_SWITCH depends on DEBUG_KERNEL && PPC_BOOK3S_64 help If you're unsure what this is, say N. + +config KASAN_SHADOW_OFFSET + hex + depends on KASAN + default 0xe0000000 diff --git a/arch/powerpc/include/asm/fixmap.h b/arch/powerpc/include/asm/fixmap.h index b9fbed84ddca..51a1a309c919 100644 --- a/arch/powerpc/include/asm/fixmap.h +++ b/arch/powerpc/include/asm/fixmap.h @@ -22,7 +22,12 @@ #include #endif +#ifdef CONFIG_KASAN +#include +#define FIXADDR_TOP KASAN_SHADOW_START +#else #define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE)) +#endif /* * Here we define all the compile-time 'special' virtual diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h index c3161b8fc017..8dc1e3819171 100644 --- a/arch/powerpc/include/asm/kasan.h +++ b/arch/powerpc/include/asm/kasan.h @@ -12,4 +12,20 @@ #define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(fn) #endif +#ifndef __ASSEMBLY__ + +#include + +#define KASAN_SHADOW_SCALE_SHIFT 3 + +#define KASAN_SHADOW_OFFSET ASM_CONST(CONFIG_KASAN_SHADOW_OFFSET) + +#define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \ + (PAGE_OFFSET >> KASAN_SHADOW_SCALE_SHIFT)) + +#define KASAN_SHADOW_END 0UL + +#define KASAN_SHADOW_SIZE (KASAN_SHADOW_END - KASAN_SHADOW_START) + +#endif /* __ASSEMBLY */ #endif diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index f6787f90e158..4e7fa4eb2dd3 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c @@ -309,6 +309,10 @@ void __init mem_init(void) mem_init_print_info(NULL); #ifdef CONFIG_PPC32 pr_info("Kernel virtual memory layout:\n"); +#ifdef CONFIG_KASAN + pr_info(" * 0x%08lx..0x%08lx : kasan shadow mem\n", + KASAN_SHADOW_START, KASAN_SHADOW_END); +#endif pr_info(" * 0x%08lx..0x%08lx : fixmap\n", FIXADDR_START, FIXADDR_TOP); #ifdef CONFIG_HIGHMEM pr_info(" * 0x%08lx..0x%08lx : highmem PTEs\n", diff --git a/arch/powerpc/mm/ptdump/ptdump.c b/arch/powerpc/mm/ptdump/ptdump.c index 37138428ab55..812ed680024f 100644 --- a/arch/powerpc/mm/ptdump/ptdump.c +++ b/arch/powerpc/mm/ptdump/ptdump.c @@ -101,6 +101,10 @@ static struct addr_marker address_markers[] = { { 0, "Fixmap start" }, { 0, "Fixmap end" }, #endif +#ifdef CONFIG_KASAN + { 0, "kasan shadow mem start" }, + { 0, "kasan shadow mem end" }, +#endif { -1, NULL }, }; @@ -322,6 +326,10 @@ static void populate_markers(void) #endif address_markers[i++].start_address = FIXADDR_START; address_markers[i++].start_address = FIXADDR_TOP; +#ifdef CONFIG_KASAN + address_markers[i++].start_address = KASAN_SHADOW_START; + address_markers[i++].start_address = KASAN_SHADOW_END; +#endif #endif /* CONFIG_PPC64 */ } From patchwork Tue Feb 26 17:22:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830661 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E42B913B5 for ; Tue, 26 Feb 2019 17:23:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C87532D2E9 for ; Tue, 26 Feb 2019 17:23:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BC0BD2D388; Tue, 26 Feb 2019 17:23:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 352C52D2E9 for ; Tue, 26 Feb 2019 17:23:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 14A178E0003; Tue, 26 Feb 2019 12:22:53 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id E6F118E000B; Tue, 26 Feb 2019 12:22:52 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BF9DF8E000A; Tue, 26 Feb 2019 12:22:52 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by kanga.kvack.org (Postfix) with ESMTP id 514928E0003 for ; Tue, 26 Feb 2019 12:22:52 -0500 (EST) Received: by mail-wm1-f72.google.com with SMTP id q126so710501wme.7 for ; Tue, 26 Feb 2019 09:22:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=mcZlyr+Y9QTQOXdd/Np+U2T6LsmbrnCiae9jtlgpNP8=; b=uihn37qX9znCByQwcP8OOQe4wN00vWM0hlevORVMLzjfO5V0/HATrj9324ikKgSrzV 3GXmOh3g3XGk+jU5fEIs0GjdCSODo4IIQYevJh3zJdiwZNn95MhjQzH6vCuuk5HtlFiM Gd6ZPmB79tekMDjCr4yWh6/Q4bs12X8uuubU5v/5icM7oytQy9FV79xa/IrtnNeIfFGu ugIoXMncIiltanBUvwi72gIyOiaCBNR6K6H1Ulm6RFgW8ah3vm28vhtHm5M5tMEtFitO CmSDQanPbyLs4dO2es03Huk5tOCuvUWSRQOIf4Oj7ZAbB5G8j5sgaqeU4tMRjTg5rMup w6ug== X-Gm-Message-State: AHQUAuZd3KKCcr6pGi/UuJvpSYBWl6nfXLpzUJPnVLfTOzQZBss8tTSo iJiR8/p/IeKB2HFm7sL1ZkQRIAyPvVlmidSb2v6Oug6TC7KOOk5P3oe2/8XWtHDFkGLyayd+I/9 4qqhBRu7aGUncUqhuBFqd9TxTChrwvzR6cV4BBNXmHH1uLUu3mfLArpNV4DN6vwY2yQ== X-Received: by 2002:a1c:44d7:: with SMTP id r206mr3462068wma.40.1551201771839; Tue, 26 Feb 2019 09:22:51 -0800 (PST) X-Google-Smtp-Source: AHgI3IZpCNN1Kc0U0GDSKTHGIiFABoSvBt3YRFGq6GQliaweHEwiJ4X36Z8zx61MQRrhjyIB7LUg X-Received: by 2002:a1c:44d7:: with SMTP id r206mr3461996wma.40.1551201770606; Tue, 26 Feb 2019 09:22:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201770; cv=none; d=google.com; s=arc-20160816; b=hyWc+coayy2gzCX6ONE4CgR75qyvZF5zS5SEeNBoO/64Y4x8Q5nYHmJE0lrznseMe/ aN2RYNwS4oxLO8s5/74OmKiF4Pu/VKOARlopaexV0YgPIwqDMw3Uza7caqVWifEqkFCc +u6j6FkRfQxoKQAILIjM6/WYpTDRJ3rvHFc0s3POO87lCuk6nEbx+oirnqhcIcVlzUx6 PeLfyxDmHMx5Gl64OjmnrPoloH3mS5M1qxwvo78gSId7eViAORCPoDb9A9wj5V5FWJqN QgzhtpaKDViYVSeXhbDdhcrqF95Ng4iDgbF82yha9HokCKuWrJ65GhMTm2l92CjD4NJ2 TnlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=mcZlyr+Y9QTQOXdd/Np+U2T6LsmbrnCiae9jtlgpNP8=; b=GxSgTGZaH2qerhgJ9SP1UbgS8+RH6AK9KYyAxyo1O9ZtHkAn//xwcUqK1mM9DOHOSK ZZ2m/Q73+FcaT4EuuYHM0hh6xJTsPaGxUIDN3ybhhVSTZvfzl1D0Cn6u2MSShlxPZFgX QDnIFmSIU6IKo9q9HWHH4Wd74wGhkJ9bo03+nOt5h4G+RgOSxPuaBgWzThNVVz5wX3kr +7BTMHHEcjLc2NzBH07fUe6WuIZg/ks1OoCRY7uve6qk/ezYrkzp4QzLr4/RbpeK3kx+ 3ilrx92oTfvXBK33D7XlsR0BGcMTCtrMatsn+4QBGKKtiLfsxTKxGKQj8k75Gk00fUCZ kG9A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=EabuQZ8p; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id r206si7808417wma.78.2019.02.26.09.22.50 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:50 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=EabuQZ8p; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485HD3Bpnz9vJLk; Tue, 26 Feb 2019 18:22: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=EabuQZ8p; 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 fn0bSWVprqoY; Tue, 26 Feb 2019 18:22: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 4485HD279yz9vJLY; Tue, 26 Feb 2019 18:22:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201768; bh=mcZlyr+Y9QTQOXdd/Np+U2T6LsmbrnCiae9jtlgpNP8=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=EabuQZ8pAOdE2sQleX2t3SsPq1GArv0PjWBeopOvSrOV1zCv5d60OdiVvczorgLNP jO4py2Mf5W3YJsoYrebjgjO6E1nuSIPtrYB/IBVVMhMV8c62eEPDubSNbsGzFVgqt5 UEYn+7ZFCuaEBHyLco9QRIwOCXj1Fvrm55L1RO+0= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id DFF9A8B97A; Tue, 26 Feb 2019 18:22: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 wP5ytr-hUdni; Tue, 26 Feb 2019 18:22:49 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 95E928B96A; Tue, 26 Feb 2019 18:22:49 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 6F6BC6F7A6; Tue, 26 Feb 2019 17:22:49 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 08/11] powerpc: disable KASAN instrumentation on early/critical files. To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:49 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP All files containing functions run before kasan_early_init() is called must have KASAN instrumentation disabled. For those file, branch profiling also have to be disabled otherwise each if () generates a call to ftrace_likely_update(). Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/Makefile | 12 ++++++++++++ arch/powerpc/lib/Makefile | 8 ++++++++ arch/powerpc/mm/Makefile | 6 ++++++ arch/powerpc/platforms/powermac/Makefile | 6 ++++++ arch/powerpc/purgatory/Makefile | 3 +++ arch/powerpc/xmon/Makefile | 1 + 6 files changed, 36 insertions(+) diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 45e47752b692..0ea6c4aa3a20 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -31,6 +31,18 @@ CFLAGS_REMOVE_btext.o = $(CC_FLAGS_FTRACE) CFLAGS_REMOVE_prom.o = $(CC_FLAGS_FTRACE) endif +KASAN_SANITIZE_early_32.o := n +KASAN_SANITIZE_cputable.o := n +KASAN_SANITIZE_prom_init.o := n +KASAN_SANITIZE_btext.o := n + +ifdef CONFIG_KASAN +CFLAGS_early_32.o += -DDISABLE_BRANCH_PROFILING +CFLAGS_cputable.o += -DDISABLE_BRANCH_PROFILING +CFLAGS_prom_init.o += -DDISABLE_BRANCH_PROFILING +CFLAGS_btext.o += -DDISABLE_BRANCH_PROFILING +endif + obj-y := cputable.o ptrace.o syscalls.o \ irq.o align.o signal_32.o pmc.o vdso.o \ process.o systbl.o idle.o \ diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 47a4de434c22..c55f9c27bf79 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile @@ -8,6 +8,14 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE) CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE) +KASAN_SANITIZE_code-patching.o := n +KASAN_SANITIZE_feature-fixups.o := n + +ifdef CONFIG_KASAN +CFLAGS_code-patching.o += -DDISABLE_BRANCH_PROFILING +CFLAGS_feature-fixups.o += -DDISABLE_BRANCH_PROFILING +endif + obj-y += alloc.o code-patching.o feature-fixups.o ifndef CONFIG_KASAN diff --git a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile index d52ec118e09d..240d73dce6bb 100644 --- a/arch/powerpc/mm/Makefile +++ b/arch/powerpc/mm/Makefile @@ -7,6 +7,12 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) CFLAGS_REMOVE_slb.o = $(CC_FLAGS_FTRACE) +KASAN_SANITIZE_ppc_mmu_32.o := n + +ifdef CONFIG_KASAN +CFLAGS_ppc_mmu_32.o += -DDISABLE_BRANCH_PROFILING +endif + obj-y := fault.o mem.o pgtable.o mmap.o \ init_$(BITS).o pgtable_$(BITS).o \ init-common.o mmu_context.o drmem.o diff --git a/arch/powerpc/platforms/powermac/Makefile b/arch/powerpc/platforms/powermac/Makefile index 923bfb340433..859efbacdf06 100644 --- a/arch/powerpc/platforms/powermac/Makefile +++ b/arch/powerpc/platforms/powermac/Makefile @@ -2,6 +2,12 @@ CFLAGS_bootx_init.o += -fPIC CFLAGS_bootx_init.o += $(call cc-option, -fno-stack-protector) +KASAN_SANITIZE_bootx_init.o := n + +ifdef CONFIG_KASAN +CFLAGS_bootx_init.o += -DDISABLE_BRANCH_PROFILING +endif + ifdef CONFIG_FUNCTION_TRACER # Do not trace early boot code CFLAGS_REMOVE_bootx_init.o = $(CC_FLAGS_FTRACE) diff --git a/arch/powerpc/purgatory/Makefile b/arch/powerpc/purgatory/Makefile index 4314ba5baf43..7c6d8b14f440 100644 --- a/arch/powerpc/purgatory/Makefile +++ b/arch/powerpc/purgatory/Makefile @@ -1,4 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 + +KASAN_SANITIZE := n + targets += trampoline.o purgatory.ro kexec-purgatory.c LDFLAGS_purgatory.ro := -e purgatory_start -r --no-undefined diff --git a/arch/powerpc/xmon/Makefile b/arch/powerpc/xmon/Makefile index 3050f9323254..f142570ad860 100644 --- a/arch/powerpc/xmon/Makefile +++ b/arch/powerpc/xmon/Makefile @@ -7,6 +7,7 @@ subdir-ccflags-y := $(call cc-disable-warning, builtin-requires-header) GCOV_PROFILE := n KCOV_INSTRUMENT := n UBSAN_SANITIZE := n +KASAN_SANITIZE := n # Disable ftrace for the entire directory ORIG_CFLAGS := $(KBUILD_CFLAGS) From patchwork Tue Feb 26 17:22:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830663 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EC5FF17E9 for ; Tue, 26 Feb 2019 17:23:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D011C2D2E9 for ; Tue, 26 Feb 2019 17:23:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C42052D3A6; Tue, 26 Feb 2019 17:23:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E108F2D2E9 for ; Tue, 26 Feb 2019 17:23:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 19C2D8E000B; Tue, 26 Feb 2019 12:22:54 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 12AF58E000A; Tue, 26 Feb 2019 12:22:53 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DABFD8E000B; Tue, 26 Feb 2019 12:22:53 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by kanga.kvack.org (Postfix) with ESMTP id 75EFD8E000A for ; Tue, 26 Feb 2019 12:22:53 -0500 (EST) Received: by mail-wr1-f71.google.com with SMTP id s5so6489333wrp.17 for ; Tue, 26 Feb 2019 09:22:53 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=MCruYdUfkoEppcvKdnnMufxZcbWxFEzCviztniBhW14=; b=HZL1x+Dtw6O44l6B7njoR0eJcme6tkdKJNc9kkpD9O31hsLhrzYh3xJQ8yKm5lbCPm nBQ1CIvpaDXVRIjD7vGzuXEo51dBBRowKOMFuWcwlLJwbIogNCj9JWDo/yTVi0fnTtOm TEyhH8CXOOFjxdPbistLS6DtmrwxE24MknH1AB/l0qV68wV1R3nCIlImG8iazQdGtpxO SgTIIeHHU25eojEigHlv/i2w8zdZdUwyJjGvEjcaZa+9Vz92Xm0jrlk+Wne5BiC6Nt88 fNHvXlSMJWHYqCDosaoShMu2DJre3tTKvXD/eRYEFeMyvbLVIm3FG4MVr+i6OA54q4cA gTKA== X-Gm-Message-State: AHQUAuYim3/rXuZi2+eWE8U9A9KVD54UACOCrnCghbIBpnDXjY5dOo0X HDcO7yG9c/a/MmbuJFWq0U8IY+v7sTjkSemtASfgky8fFgDwYtE6O9DZJfTPYN9kwnhNfUMUd/H MZyoORDQ4rEVwi2xnP9ivtJ1eB1Z0i3oQKwgaz/wnZaclpHs3DkZsg/8bHJ/1aNrXUg== X-Received: by 2002:adf:dd8a:: with SMTP id x10mr18167637wrl.117.1551201772979; Tue, 26 Feb 2019 09:22:52 -0800 (PST) X-Google-Smtp-Source: AHgI3IZWfcclr9UgKFhb7+il0dLDRfynx2DDqAiFsi8PRSfb4ATqHUuGaw/grTfJsuiS0llkxsBK X-Received: by 2002:adf:dd8a:: with SMTP id x10mr18167555wrl.117.1551201771607; Tue, 26 Feb 2019 09:22:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201771; cv=none; d=google.com; s=arc-20160816; b=v5487r0EY6umwXNa2ZCM/k0xodrNF6N7hL1LxxD0Fdjfc+mv4Qe6OsuRDfsH043VoJ jbxMe6LxS8b2ohX1vBEFj6W3MLicqmRPhzO1nQS9EdfNrmsgikP4iQU9iJlQiNUpICzA TEP8l+9/NJ6SeVRKIblKAXbnvfX6kadc+jAb7b+y3ZvaULU2c2xnKLmceTy70R7asJL/ aC1NpkU+mpsJYF63vs2yAP1F12EJ1jls8M2wz13MltwuUEw+UNLI/cOMJl9jjr/6gN0e csqeYK26sollh9ux7ulcLqsSzJlCnuIBJ5Rg8tLjO/4M+3mB3oK9mYifhmxZjbO5ST5f MLMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=MCruYdUfkoEppcvKdnnMufxZcbWxFEzCviztniBhW14=; b=Awd9d10uO0Dnseg+WF0oxxEekIZKlf26ff6NPcs/1DBdJlcG9up33UhPfpT2g71RfU RILKqNqNrZzRD2wyDBDUs2MFZQxPLNkM8hc8JSVU71Fp35z2/pntHieZx484hBHQmof2 kd2XprKJXgG0EyJAHAsOUZE8kauaDdfspbgytRivYddXroZv7HjN/5Oq59yLdvI+m/Wz MTdfcoUUx9VVtLxPab5qO9kBMDK+8AbL+S+9XHo4xurVjMfyXXKKgTaYRps9kwwfRVK2 2uVXfVSpW+OGL7qgmC+Voka/4VzCIDP6Ip9tRRygMS14kNstt/+ftB0GMVm0MSP1ylqa ZEOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=nii38F0w; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id 5si9649176wrs.202.2019.02.26.09.22.51 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:51 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=nii38F0w; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485HF4F1bz9vJLl; Tue, 26 Feb 2019 18:22:49 +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=nii38F0w; 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 Hqvlxn1v-shm; Tue, 26 Feb 2019 18:22:49 +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 4485HF37drz9vJLY; Tue, 26 Feb 2019 18:22:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201769; bh=MCruYdUfkoEppcvKdnnMufxZcbWxFEzCviztniBhW14=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=nii38F0wdtQSUtPX/gjiLR5qbjzNQ5yPG0/N0JoQn/6NBjlaCg9SKxQXsWK75OGty 422czf6tk7joV5bLbUWZ1RHlwHOCqPA85aDlE6dN56eN0eLkZwUojr6CL0oJp0HWUd VPpyc7B6FI1/hNM9edqfJLMrSA38V+Mv6ou2ybj0= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 029078B97A; Tue, 26 Feb 2019 18:22:51 +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 3sA-p-HxDEkf; Tue, 26 Feb 2019 18:22:50 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A0C5F8B96A; Tue, 26 Feb 2019 18:22:50 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 7709A6F7A6; Tue, 26 Feb 2019 17:22:50 +0000 (UTC) Message-Id: <111a4de338a845553a4554291a3c931d6c62225d.1551161392.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 09/11] powerpc/32: Add KASAN support To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:50 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP This patch adds KASAN support for PPC32. The following patch will add an early activation of hash table for book3s. Until then, a warning will be raised if trying to use KASAN on an hash 6xx. To support KASAN, this patch initialises that MMU mapings for accessing to the KASAN shadow area defined in a previous patch. An early mapping is set as soon as the kernel code has been relocated at its definitive place. Then the definitive mapping is set once paging is initialised. For modules, the shadow area is allocated at module_alloc(). Signed-off-by: Christophe Leroy --- arch/powerpc/Kconfig | 1 + arch/powerpc/include/asm/kasan.h | 7 ++ arch/powerpc/kernel/head_32.S | 3 + arch/powerpc/kernel/head_40x.S | 3 + arch/powerpc/kernel/head_44x.S | 3 + arch/powerpc/kernel/head_8xx.S | 3 + arch/powerpc/kernel/head_fsl_booke.S | 3 + arch/powerpc/kernel/setup-common.c | 3 + arch/powerpc/mm/Makefile | 1 + arch/powerpc/mm/kasan/Makefile | 5 ++ arch/powerpc/mm/kasan/kasan_init_32.c | 153 ++++++++++++++++++++++++++++++++++ 11 files changed, 185 insertions(+) create mode 100644 arch/powerpc/mm/kasan/Makefile create mode 100644 arch/powerpc/mm/kasan/kasan_init_32.c diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 652c25260838..8d6108c83299 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -172,6 +172,7 @@ config PPC select GENERIC_TIME_VSYSCALL select HAVE_ARCH_AUDITSYSCALL select HAVE_ARCH_JUMP_LABEL + select HAVE_ARCH_KASAN if PPC32 select HAVE_ARCH_KGDB select HAVE_ARCH_MMAP_RND_BITS select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h index 8dc1e3819171..74a4ba9fb8a3 100644 --- a/arch/powerpc/include/asm/kasan.h +++ b/arch/powerpc/include/asm/kasan.h @@ -27,5 +27,12 @@ #define KASAN_SHADOW_SIZE (KASAN_SHADOW_END - KASAN_SHADOW_START) +#ifdef CONFIG_KASAN +void kasan_early_init(void); +void kasan_init(void); +#else +static inline void kasan_init(void) { } +#endif + #endif /* __ASSEMBLY */ #endif diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index ce6a972f2584..02229c005853 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S @@ -952,6 +952,9 @@ start_here: * Do early platform-specific initialization, * and set up the MMU. */ +#ifdef CONFIG_KASAN + bl kasan_early_init +#endif li r3,0 mr r4,r31 bl machine_init diff --git a/arch/powerpc/kernel/head_40x.S b/arch/powerpc/kernel/head_40x.S index a9c934f2319b..efa219d2136e 100644 --- a/arch/powerpc/kernel/head_40x.S +++ b/arch/powerpc/kernel/head_40x.S @@ -848,6 +848,9 @@ start_here: /* * Decide what sort of machine this is and initialize the MMU. */ +#ifdef CONFIG_KASAN + bl kasan_early_init +#endif li r3,0 mr r4,r31 bl machine_init diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S index 37117ab11584..34a5df827b38 100644 --- a/arch/powerpc/kernel/head_44x.S +++ b/arch/powerpc/kernel/head_44x.S @@ -203,6 +203,9 @@ _ENTRY(_start); /* * Decide what sort of machine this is and initialize the MMU. */ +#ifdef CONFIG_KASAN + bl kasan_early_init +#endif li r3,0 mr r4,r31 bl machine_init diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S index 03c73b4c6435..d25adb6ef235 100644 --- a/arch/powerpc/kernel/head_8xx.S +++ b/arch/powerpc/kernel/head_8xx.S @@ -853,6 +853,9 @@ start_here: /* * Decide what sort of machine this is and initialize the MMU. */ +#ifdef CONFIG_KASAN + bl kasan_early_init +#endif li r3,0 mr r4,r31 bl machine_init diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index 1881127682e9..0fc38eb957b7 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S @@ -275,6 +275,9 @@ set_ivor: /* * Decide what sort of machine this is and initialize the MMU. */ +#ifdef CONFIG_KASAN + bl kasan_early_init +#endif mr r3,r30 mr r4,r31 bl machine_init diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index e7534f306c8e..3c6c5a43901e 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -67,6 +67,7 @@ #include #include #include +#include #include "setup.h" @@ -865,6 +866,8 @@ static void smp_setup_pacas(void) */ void __init setup_arch(char **cmdline_p) { + kasan_init(); + *cmdline_p = boot_command_line; /* Set a half-reasonable default so udelay does something sensible */ diff --git a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile index 240d73dce6bb..80382a2d169b 100644 --- a/arch/powerpc/mm/Makefile +++ b/arch/powerpc/mm/Makefile @@ -53,6 +53,7 @@ obj-$(CONFIG_PPC_COPRO_BASE) += copro_fault.o obj-$(CONFIG_SPAPR_TCE_IOMMU) += mmu_context_iommu.o obj-$(CONFIG_PPC_PTDUMP) += ptdump/ obj-$(CONFIG_PPC_MEM_KEYS) += pkeys.o +obj-$(CONFIG_KASAN) += kasan/ # Disable kcov instrumentation on sensitive code # This is necessary for booting with kcov enabled on book3e machines diff --git a/arch/powerpc/mm/kasan/Makefile b/arch/powerpc/mm/kasan/Makefile new file mode 100644 index 000000000000..6577897673dd --- /dev/null +++ b/arch/powerpc/mm/kasan/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0 + +KASAN_SANITIZE := n + +obj-$(CONFIG_PPC32) += kasan_init_32.o diff --git a/arch/powerpc/mm/kasan/kasan_init_32.c b/arch/powerpc/mm/kasan/kasan_init_32.c new file mode 100644 index 000000000000..42f8534ce3ea --- /dev/null +++ b/arch/powerpc/mm/kasan/kasan_init_32.c @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: GPL-2.0 + +#define DISABLE_BRANCH_PROFILING + +#include +#include +#include +#include +#include +#include +#include +#include + +static void kasan_populate_pte(pte_t *ptep, pgprot_t prot) +{ + phys_addr_t pa = __pa(kasan_early_shadow_page); + int i; + + for (i = 0; i < PTRS_PER_PTE; i++, ptep++) + __set_pte_at(&init_mm, (unsigned long)kasan_early_shadow_page, + ptep, pfn_pte(PHYS_PFN(pa), prot), 0); +} + +static int kasan_init_shadow_page_tables(unsigned long k_start, unsigned long k_end) +{ + pmd_t *pmd; + unsigned long k_cur, k_next; + + pmd = pmd_offset(pud_offset(pgd_offset_k(k_start), k_start), k_start); + + for (k_cur = k_start; k_cur != k_end; k_cur = k_next, pmd++) { + pte_t *new; + + k_next = pgd_addr_end(k_cur, k_end); + if ((void *)pmd_page_vaddr(*pmd) != kasan_early_shadow_pte) + continue; + + new = pte_alloc_one_kernel(&init_mm); + + if (!new) + return -ENOMEM; + kasan_populate_pte(new, PAGE_KERNEL_RO); + pmd_populate_kernel(&init_mm, pmd, new); + } + return 0; +} + +static void __ref *kasan_get_one_page(void) +{ + if (slab_is_available()) + return (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO); + + return memblock_alloc(PAGE_SIZE, PAGE_SIZE); +} + +static int __ref kasan_init_region(void *start, size_t size) +{ + unsigned long k_start = (unsigned long)kasan_mem_to_shadow(start); + unsigned long k_end = (unsigned long)kasan_mem_to_shadow(start + size); + unsigned long k_cur; + pmd_t *pmd; + void *block = NULL; + int ret = kasan_init_shadow_page_tables(k_start, k_end); + + if (ret) + return ret; + + if (!slab_is_available()) + block = memblock_alloc(k_end - k_start, PAGE_SIZE); + + for (k_cur = k_start; k_cur < k_end; k_cur += PAGE_SIZE) { + void *va = block ? block + k_cur - k_start : + kasan_get_one_page(); + pte_t pte = pfn_pte(PHYS_PFN(__pa(va)), PAGE_KERNEL); + + if (!va) + return -ENOMEM; + + pmd = pmd_offset(pud_offset(pgd_offset_k(k_cur), k_cur), k_cur); + pte_update(pte_offset_kernel(pmd, k_cur), ~0, pte_val(pte)); + } + flush_tlb_kernel_range(k_start, k_end); + return 0; +} + +static void __init kasan_remap_early_shadow_ro(void) +{ + kasan_populate_pte(kasan_early_shadow_pte, PAGE_KERNEL_RO); + flush_tlb_mm(&init_mm); +} + +void __init kasan_init(void) +{ + int ret; + struct memblock_region *reg; + + for_each_memblock(memory, reg) { + phys_addr_t base = reg->base; + phys_addr_t top = min(base + reg->size, total_lowmem); + + if (base >= top) + continue; + + ret = kasan_init_region(__va(base), top - base); + if (ret) + panic("kasan: kasan_init_region() failed"); + } + + kasan_remap_early_shadow_ro(); + + clear_page(kasan_early_shadow_page); + + /* At this point kasan is fully initialized. Enable error messages */ + init_task.kasan_depth = 0; + pr_info("KASAN init done\n"); +} + +#ifdef CONFIG_MODULES +void *module_alloc(unsigned long size) +{ + void *base = vmalloc_exec(size); + + if (!base) + return NULL; + + if (!kasan_init_region(base, size)) + return base; + + vfree(base); + + return NULL; +} +#endif + +void __init kasan_early_init(void) +{ + unsigned long addr = KASAN_SHADOW_START; + unsigned long end = KASAN_SHADOW_END; + unsigned long next; + pmd_t *pmd = pmd_offset(pud_offset(pgd_offset_k(addr), addr), addr); + + BUILD_BUG_ON(KASAN_SHADOW_START & ~PGDIR_MASK); + + kasan_populate_pte(kasan_early_shadow_pte, PAGE_KERNEL); + + do { + next = pgd_addr_end(addr, end); + pmd_populate_kernel(&init_mm, pmd, kasan_early_shadow_pte); + } while (pmd++, addr = next, addr != end); + + if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) + WARN(1, "KASAN not supported on hash 6xx"); +} From patchwork Tue Feb 26 17:22:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830665 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AD7C117E6 for ; Tue, 26 Feb 2019 17:23:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9019B2D388 for ; Tue, 26 Feb 2019 17:23:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 81B052D3C1; Tue, 26 Feb 2019 17:23:17 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E9F332D388 for ; Tue, 26 Feb 2019 17:23:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 219278E000D; Tue, 26 Feb 2019 12:22:55 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 128F28E000A; Tue, 26 Feb 2019 12:22:55 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EBD828E000D; Tue, 26 Feb 2019 12:22:54 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by kanga.kvack.org (Postfix) with ESMTP id 8DE548E000A for ; Tue, 26 Feb 2019 12:22:54 -0500 (EST) Received: by mail-wr1-f70.google.com with SMTP id f4so6491821wrj.11 for ; Tue, 26 Feb 2019 09:22:54 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=iDP7gsyvcqTo9RdhF5mvEcZHsCZ/UEXVBMDee0rR734=; b=aFToaRv3BvyNg8WMTfUWj24ndpJxmca/6MOX8vHVELX21hFK4hAmJwxMCOckVm5QPQ HoGWyPdnix7Ixo5R+IWeHWYGHZxwvoPmr4XLGMgY5rLubAq62UqojXMZ80PBT0l2ZiXB XWdzyDo0xKUJZbBoNRfSwDNIyybqWXyoPBXqztfgC8C+5eL3H25kAVj91IU2zwtZFnr9 cGGBQuNWlNh1e0SPfAWbsK2MAltNSKPBTg3hSPfcp11Qq9YevE6+4/G47H5jPo+0649+ ZpyermhA7+kT10TwvHvWoDzZ4N9Y9NQmC39NQ8fUYSgJU19aVAGDbsr0bZVLzKsPxttl igmw== X-Gm-Message-State: AHQUAubugruen890V7xGckgdq58R27UGw+HWM3M4b2B70ka4LoZf/to6 nRyZCmIbTSJrepmOlowZ4LRkVvQJKGP69k7+csd46jJsGgzRlsJ/AUQS6ArOXtc1nVkDfI1mGFr +dEVOPVoeVGurwgWGcX0JzSjC1tGRTRD7FChvYwN47j3653aueQJOoUJLyagIKa4IaQ== X-Received: by 2002:a1c:df07:: with SMTP id w7mr3412977wmg.23.1551201774087; Tue, 26 Feb 2019 09:22:54 -0800 (PST) X-Google-Smtp-Source: AHgI3Ib5oFL6GVjjmnHWtuH3vGaCyA17u66L8T/lqt1h+027J+x4u5NtSVNG4VOmWPamg+b2e5E1 X-Received: by 2002:a1c:df07:: with SMTP id w7mr3412923wmg.23.1551201772790; Tue, 26 Feb 2019 09:22:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201772; cv=none; d=google.com; s=arc-20160816; b=wp60vczsdA6YdOJjb4r9B25gnme/HC7Q7+vZj2LKRJP4UFkJBEMTcxP1dKkKi9v4FI 3ktoaoZWzPAOPhoGXuK9XgLRmaKw0sJJm9HqExSvclc28uQ+du8xRqutHRANHHSAh4W3 qlFsnBLo9itGAx96bSiMP/5VBZVbrkwpJeYiLBD+4EhzOXnJ+GcA+9uCyYnoCAlVBlnm gkduTarOHrbEZXP4mgD2Vif4njJuW33ng6GNqjphjLonAaY0+YUjRzIlPbWzFRTEp/kK qvrJ9x0+slHz8yKHOXDX7sB8xiOkq1XJxavBUzSxLd3Zpe/lVjqa7voxgHxXx/OLSfKs vYyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=iDP7gsyvcqTo9RdhF5mvEcZHsCZ/UEXVBMDee0rR734=; b=RfJ9M+PNe/1HE88AvWsj/48AqdnkAmcEe7IPydeFHdgXHpSnIvvbUf71HLQ5AHDVu2 s7kyY8VOPIlN8edX7pyBeLRLxNw4yDx0hu2P/IgWejVZO9FLEqOc/r6YzhPFBEeB9Fir I7rhggGAZVtq28ctOFEAq6EE92NICT8TuFlnKzauxFgpUzjLAO2TkYWeAvVdGlcbL/5k /zOFwG/E5dzNdMNjPlYRim6xD8UYl+8ktg1hFWlId1hbjoClhQeDj9Ry1lp2bTOcEpkQ i0XwEVLp5Ju/aacm+MMnZ/Jx4PxXKg1fQIR3cLxsTLWkDI2AjxzfqD9BBF22atFZl0yn h57g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b="e/w18jRF"; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id n5si10373309wrr.153.2019.02.26.09.22.52 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:52 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b="e/w18jRF"; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485HG3nxHz9vJLm; Tue, 26 Feb 2019 18:22:50 +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=e/w18jRF; 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 cW5GIqbS7OHZ; Tue, 26 Feb 2019 18:22:50 +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 4485HG2dYkz9vJLY; Tue, 26 Feb 2019 18:22:50 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201770; bh=iDP7gsyvcqTo9RdhF5mvEcZHsCZ/UEXVBMDee0rR734=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=e/w18jRFyW0Vuo5p+wAhkh3rq1yjS5qOco7z2p/J/BBRe0LT58LHBtGKNILkhGMHw sa0J+UIikV4S+wkG2SMuVRDq2ijBRgaYrxjX/JcMc3nZJ4tpl+ZMCkAC2weRd427OG eltKio7IHTZqgTmMBFawxxU0ykDDWxpCKs1Q2J+4= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 029B58B97A; Tue, 26 Feb 2019 18:22:52 +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 cFVPliJT_nvz; Tue, 26 Feb 2019 18:22:51 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id B0E758B96A; Tue, 26 Feb 2019 18:22:51 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 7EB0F6F7A6; Tue, 26 Feb 2019 17:22:51 +0000 (UTC) Message-Id: <6a7161b4c947d72ae0fba7d29748b57b92dd3814.1551161392.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 10/11] powerpc/32s: move hash code patching out of MMU_init_hw() To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:51 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP For KASAN, hash table handling will be activated early for accessing to KASAN shadow areas. In order to avoid any modification of the hash functions while they are still used with the early hash table, the code patching is moved out of MMU_init_hw() and put close to the big-bang switch to the final hash table. Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/head_32.S | 3 +++ arch/powerpc/mm/mmu_decl.h | 1 + arch/powerpc/mm/ppc_mmu_32.c | 36 ++++++++++++++++++++++-------------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index 02229c005853..e644aab2cf5b 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S @@ -960,6 +960,9 @@ start_here: bl machine_init bl __save_cpu_setup bl MMU_init +BEGIN_MMU_FTR_SECTION + bl MMU_init_hw_patch +END_MMU_FTR_SECTION_IFSET(MMU_FTR_HPTE_TABLE) /* * Go back to running unmapped so we can load up new values diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h index 74ff61dabcb1..d726ff776054 100644 --- a/arch/powerpc/mm/mmu_decl.h +++ b/arch/powerpc/mm/mmu_decl.h @@ -130,6 +130,7 @@ extern void wii_memory_fixups(void); */ #ifdef CONFIG_PPC32 extern void MMU_init_hw(void); +void MMU_init_hw_patch(void); unsigned long mmu_mapin_ram(unsigned long base, unsigned long top); #endif diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c index 2d5b0d50fb31..38c0e28c21e1 100644 --- a/arch/powerpc/mm/ppc_mmu_32.c +++ b/arch/powerpc/mm/ppc_mmu_32.c @@ -39,6 +39,7 @@ struct hash_pte *Hash, *Hash_end; unsigned long Hash_size, Hash_mask; unsigned long _SDR1; +static unsigned int hash_mb, hash_mb2; struct ppc_bat BATS[8][2]; /* 8 pairs of IBAT, DBAT */ @@ -308,7 +309,6 @@ void hash_preload(struct mm_struct *mm, unsigned long ea, */ void __init MMU_init_hw(void) { - unsigned int hmask, mb, mb2; unsigned int n_hpteg, lg_n_hpteg; if (!mmu_has_feature(MMU_FTR_HPTE_TABLE)) @@ -349,20 +349,30 @@ void __init MMU_init_hw(void) (unsigned long long)(total_memory >> 20), Hash_size >> 10, Hash); - /* - * Patch up the instructions in hashtable.S:create_hpte - */ - if ( ppc_md.progress ) ppc_md.progress("hash:patch", 0x345); Hash_mask = n_hpteg - 1; - hmask = Hash_mask >> (16 - LG_HPTEG_SIZE); - mb2 = mb = 32 - LG_HPTEG_SIZE - lg_n_hpteg; + hash_mb2 = hash_mb = 32 - LG_HPTEG_SIZE - lg_n_hpteg; if (lg_n_hpteg > 16) - mb2 = 16 - LG_HPTEG_SIZE; + hash_mb2 = 16 - LG_HPTEG_SIZE; +} + +void __init MMU_init_hw_patch(void) +{ + unsigned int hmask = Hash_mask >> (16 - LG_HPTEG_SIZE); + if (ppc_md.progress) + ppc_md.progress("hash:patch", 0x345); + if (ppc_md.progress) + ppc_md.progress("hash:done", 0x205); + + /* WARNING: Make sure nothing can trigger a KASAN check past this point */ + + /* + * Patch up the instructions in hashtable.S:create_hpte + */ modify_instruction_site(&patch__hash_page_A0, 0xffff, ((unsigned int)Hash - PAGE_OFFSET) >> 16); - modify_instruction_site(&patch__hash_page_A1, 0x7c0, mb << 6); - modify_instruction_site(&patch__hash_page_A2, 0x7c0, mb2 << 6); + modify_instruction_site(&patch__hash_page_A1, 0x7c0, hash_mb << 6); + modify_instruction_site(&patch__hash_page_A2, 0x7c0, hash_mb2 << 6); modify_instruction_site(&patch__hash_page_B, 0xffff, hmask); modify_instruction_site(&patch__hash_page_C, 0xffff, hmask); @@ -371,11 +381,9 @@ void __init MMU_init_hw(void) */ modify_instruction_site(&patch__flush_hash_A0, 0xffff, ((unsigned int)Hash - PAGE_OFFSET) >> 16); - modify_instruction_site(&patch__flush_hash_A1, 0x7c0, mb << 6); - modify_instruction_site(&patch__flush_hash_A2, 0x7c0, mb2 << 6); + modify_instruction_site(&patch__flush_hash_A1, 0x7c0, hash_mb << 6); + modify_instruction_site(&patch__flush_hash_A2, 0x7c0, hash_mb2 << 6); modify_instruction_site(&patch__flush_hash_B, 0xffff, hmask); - - if ( ppc_md.progress ) ppc_md.progress("hash:done", 0x205); } void setup_initial_memory_limit(phys_addr_t first_memblock_base, From patchwork Tue Feb 26 17:22:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10830667 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C96C913B5 for ; Tue, 26 Feb 2019 17:23:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AC0582D388 for ; Tue, 26 Feb 2019 17:23:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9F6DB2D3C1; Tue, 26 Feb 2019 17:23:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 049062D388 for ; Tue, 26 Feb 2019 17:23:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C2F2F8E000A; Tue, 26 Feb 2019 12:22:55 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id B14C08E000E; Tue, 26 Feb 2019 12:22:55 -0500 (EST) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9198A8E000A; Tue, 26 Feb 2019 12:22:55 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by kanga.kvack.org (Postfix) with ESMTP id 28F938E000E for ; Tue, 26 Feb 2019 12:22:55 -0500 (EST) Received: by mail-wr1-f70.google.com with SMTP id e14so6490763wrt.12 for ; Tue, 26 Feb 2019 09:22:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:message-id:in-reply-to:references :from:subject:to:cc:date; bh=CUXrFBKhYBz+mCNccGBkdNShdaiuJr/Xy6eAIyQykWk=; b=DlN6T2xj2jCmbk0EmoEdxSWuCGXnetzM+W3CQZ+c6ykar6PLIfrykEO3DiS1FniTY4 PWVaYjpOel5gioHCxfJ37kUBoDRRLSHdl0SR97gTrGbMoksKeFLt/OWzB/9IgJPZ4iYm 1F4mq2uNYx1qRq5mfCWAZIW8yA2uet3Ahhzm+CzRe7Csw6qGnZX/9BXrtN+OGuO7Hv9M Yl/l8+xzSzXMpb0jzHUw3I+H0KQ3rXSOrsCMEqK8KL4RokBoo90W0xD5HHpxoQST/Dop +yeTzBDwdLs9WLlNOCbSuG70be2z2dWrRBEY0+RSclVCqsus6Qglbyjs8/8KaU1bV1oy dxaw== X-Gm-Message-State: AHQUAuaJUY6KWYwuRWGKGS2iD19dkOGf2Jh+XdfPaTr4kRMDYEm0ACDU JlILu+CiMP1Os34d922KEQdxP0nrC9VWDHvgdr7s3CLePRa13Itbba2KyEcmCpWZY+kH0hN86eO jb7dSsmFTqJuku0Ks0r95PIA8sO5EJN5mF02iTUHmWY8frwaK9qjRiANW+q27YVn8kw== X-Received: by 2002:a05:6000:50:: with SMTP id k16mr12816121wrx.153.1551201774676; Tue, 26 Feb 2019 09:22:54 -0800 (PST) X-Google-Smtp-Source: AHgI3IbPpdYMXLHbRoCPEwxGY+zbANs/9kXEMIL6v8PcHh72PUD7cG8HYKQe/GKdqVJ/GZxApcVJ X-Received: by 2002:a05:6000:50:: with SMTP id k16mr12816059wrx.153.1551201773578; Tue, 26 Feb 2019 09:22:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551201773; cv=none; d=google.com; s=arc-20160816; b=uABUv6B77v5jC+dbfmfjSTjBQQomVA/ykPKrSI8GeBejtBExBArOkAkBalY3HwoQSn zmU+jkeqwME/o4tWv5vl7s7TaYXQBb0ackNlICZ9SxhoOu3AD7YwH3D2BiEx6GBwU99N L1cdjHssdSpJuSYPXE0MyhXU53+KD9136VXhbfU7JV7+iYAadlHKT7bJWFLOnDV92kEw UEtdlrTyDhbgHU7FMk1iXJRw385H7GmaWcQr9L0Bmi7ghyVg4eJm/U7Q3xZaDFZcnjs7 mdPG5Wd/E47nMH1uWGI11zU4nrDKq3zj4crC+xaS9VFYVrs0xGj0yvvLPAj7AEO6dnsF AwTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:cc:to:subject:from:references:in-reply-to:message-id :dkim-signature; bh=CUXrFBKhYBz+mCNccGBkdNShdaiuJr/Xy6eAIyQykWk=; b=KlMgX56LXuzYOLW6yCdo5UQDc/qaF2wGeu6FiuDFIW9mN+cYEOz9oTmEkT07xAseeT 7rxzVMXE+/VATiNu7EFA9O1ptIhGYGcYswZr8uAUNK9nwsef3/G4+W+AKDYE7t15Wjrx i/VsgSlYRkEdeQ7fYGcDiiS96TMCOxJ1g8onuKl8NP8G00faedFF1q+1PzHwmdZ7G8RB 5AHz8gxQZpkzJlJpEljML1nrNJAdmfPakYYelhIJg2aPGezhXosl+UFwVa56yZDsYPP2 GKFw0gzzAxYEmVMFr9YprAsZJGjH8lhTuWesqmRDGrBddu6azTHX3JMBMIwjDkGtAO6I DzMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=TbTml2UO; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from pegase1.c-s.fr (pegase1.c-s.fr. [93.17.236.30]) by mx.google.com with ESMTPS id n16si8519588wrx.115.2019.02.26.09.22.53 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 09:22:53 -0800 (PST) Received-SPF: pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) client-ip=93.17.236.30; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=TbTml2UO; spf=pass (google.com: domain of christophe.leroy@c-s.fr designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@c-s.fr Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4485HH3l0jz9vJLc; Tue, 26 Feb 2019 18:22:51 +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=TbTml2UO; 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 roTJiIgRYxfx; Tue, 26 Feb 2019 18:22:51 +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 4485HH2dx4z9vJLY; Tue, 26 Feb 2019 18:22:51 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551201771; bh=CUXrFBKhYBz+mCNccGBkdNShdaiuJr/Xy6eAIyQykWk=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=TbTml2UOrOMFk5cVLsf04ffiKDLFYoUnVi3gyaj3KDWMfZqtgY5b8p5lzHRktEiO6 Mxaisx+5+S9KEBMqEEo6/ibLk3DY0hE4ywewiZCPL+Yt47jyX9XqKNrx9rKBTS1rjL yOvR023jksF7QaXyz6cIAukt7ZLGOCOv10+4TeMM= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 028DF8B97A; Tue, 26 Feb 2019 18:22:53 +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 fSpD_c9jC6vE; Tue, 26 Feb 2019 18:22:52 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id B11228B96A; Tue, 26 Feb 2019 18:22:52 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 854736F7A6; Tue, 26 Feb 2019 17:22:52 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v8 11/11] powerpc/32s: set up an early static hash table for KASAN. To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Nicholas Piggin , Aneesh Kumar K.V , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Daniel Axtens Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kasan-dev@googlegroups.com, linux-mm@kvack.org Date: Tue, 26 Feb 2019 17:22:52 +0000 (UTC) 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: X-Virus-Scanned: ClamAV using ClamSMTP KASAN requires early activation of hash table, before memblock() functions are available. This patch implements an early hash_table statically defined in __initdata. During early boot, a single page table is used. For hash32, when doing the final init, one page table is allocated for each PGD entry because of the _PAGE_HASHPTE flag which can't be common to several virt pages. Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/head_32.S | 40 ++++++++++++++++++++++++++--------- arch/powerpc/mm/kasan/kasan_init_32.c | 32 ++++++++++++++++++++++++---- arch/powerpc/mm/mmu_decl.h | 1 + 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index e644aab2cf5b..65c9e8819da1 100644 --- a/arch/powerpc/kernel/head_32.S +++ b/arch/powerpc/kernel/head_32.S @@ -160,6 +160,10 @@ __after_mmu_off: bl flush_tlbs bl initial_bats + bl load_segment_registers +#ifdef CONFIG_KASAN + bl early_hash_table +#endif #if defined(CONFIG_BOOTX_TEXT) bl setup_disp_bat #endif @@ -205,7 +209,7 @@ __after_mmu_off: */ turn_on_mmu: mfmsr r0 - ori r0,r0,MSR_DR|MSR_IR + ori r0,r0,MSR_DR|MSR_IR|MSR_RI mtspr SPRN_SRR1,r0 lis r0,start_here@h ori r0,r0,start_here@l @@ -881,11 +885,24 @@ _ENTRY(__restore_cpu_setup) blr #endif /* !defined(CONFIG_PPC_BOOK3S_32) */ - /* * Load stuff into the MMU. Intended to be called with * IR=0 and DR=0. */ +#ifdef CONFIG_KASAN +early_hash_table: + sync /* Force all PTE updates to finish */ + isync + tlbia /* Clear all TLB entries */ + sync /* wait for tlbia/tlbie to finish */ + TLBSYNC /* ... on all CPUs */ + /* Load the SDR1 register (hash table base & size) */ + lis r6, early_hash - PAGE_OFFSET@h + ori r6, r6, 3 /* 256kB table */ + mtspr SPRN_SDR1, r6 + blr +#endif + load_up_mmu: sync /* Force all PTE updates to finish */ isync @@ -897,14 +914,6 @@ load_up_mmu: tophys(r6,r6) lwz r6,_SDR1@l(r6) mtspr SPRN_SDR1,r6 - li r0,16 /* load up segment register values */ - mtctr r0 /* for context 0 */ - lis r3,0x2000 /* Ku = 1, VSID = 0 */ - li r4,0 -3: mtsrin r3,r4 - addi r3,r3,0x111 /* increment VSID */ - addis r4,r4,0x1000 /* address of next segment */ - bdnz 3b /* Load the BAT registers with the values set up by MMU_init. MMU_init takes care of whether we're on a 601 or not. */ @@ -926,6 +935,17 @@ BEGIN_MMU_FTR_SECTION END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS) blr +load_segment_registers: + li r0, 16 /* load up segment register values */ + mtctr r0 /* for context 0 */ + lis r3, 0x2000 /* Ku = 1, VSID = 0 */ + li r4, 0 +3: mtsrin r3, r4 + addi r3, r3, 0x111 /* increment VSID */ + addis r4, r4, 0x1000 /* address of next segment */ + bdnz 3b + blr + /* * This is where the main kernel code starts. */ diff --git a/arch/powerpc/mm/kasan/kasan_init_32.c b/arch/powerpc/mm/kasan/kasan_init_32.c index 42f8534ce3ea..8c25c1e8c2c8 100644 --- a/arch/powerpc/mm/kasan/kasan_init_32.c +++ b/arch/powerpc/mm/kasan/kasan_init_32.c @@ -60,10 +60,13 @@ static int __ref kasan_init_region(void *start, size_t size) unsigned long k_cur; pmd_t *pmd; void *block = NULL; - int ret = kasan_init_shadow_page_tables(k_start, k_end); - if (ret) - return ret; + if (!early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) { + int ret = kasan_init_shadow_page_tables(k_start, k_end); + + if (ret) + return ret; + } if (!slab_is_available()) block = memblock_alloc(k_end - k_start, PAGE_SIZE); @@ -94,6 +97,13 @@ void __init kasan_init(void) int ret; struct memblock_region *reg; + if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) { + ret = kasan_init_shadow_page_tables(KASAN_SHADOW_START, KASAN_SHADOW_END); + + if (ret) + panic("kasan: kasan_init_shadow_page_tables() failed"); + } + for_each_memblock(memory, reg) { phys_addr_t base = reg->base; phys_addr_t top = min(base + reg->size, total_lowmem); @@ -132,6 +142,20 @@ void *module_alloc(unsigned long size) } #endif +#ifdef CONFIG_PPC_BOOK3S_32 +u8 __initdata early_hash[256 << 10] __aligned(256 << 10) = {0}; + +static void __init kasan_early_hash_table(void) +{ + modify_instruction_site(&patch__hash_page_A0, 0xffff, __pa(early_hash) >> 16); + modify_instruction_site(&patch__flush_hash_A0, 0xffff, __pa(early_hash) >> 16); + + Hash = (struct hash_pte *)early_hash; +} +#else +static void __init kasan_early_hash_table(void) {} +#endif + void __init kasan_early_init(void) { unsigned long addr = KASAN_SHADOW_START; @@ -149,5 +173,5 @@ void __init kasan_early_init(void) } while (pmd++, addr = next, addr != end); if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) - WARN(1, "KASAN not supported on hash 6xx"); + kasan_early_hash_table(); } diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h index d726ff776054..31fce3914ddc 100644 --- a/arch/powerpc/mm/mmu_decl.h +++ b/arch/powerpc/mm/mmu_decl.h @@ -106,6 +106,7 @@ extern unsigned int rtas_data, rtas_size; struct hash_pte; extern struct hash_pte *Hash, *Hash_end; extern unsigned long Hash_size, Hash_mask; +extern u8 early_hash[]; #endif /* CONFIG_PPC32 */