From patchwork Fri Mar 1 12:33:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10835165 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 888841390 for ; Fri, 1 Mar 2019 12:33:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 766392E786 for ; Fri, 1 Mar 2019 12:33:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6A5292EAB6; Fri, 1 Mar 2019 12:33:46 +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 DA3B62E786 for ; Fri, 1 Mar 2019 12:33:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 907C38E0004; Fri, 1 Mar 2019 07:33:42 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 8708F8E0001; Fri, 1 Mar 2019 07:33:42 -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 5AB888E0004; Fri, 1 Mar 2019 07:33:42 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by kanga.kvack.org (Postfix) with ESMTP id F33A68E0003 for ; Fri, 1 Mar 2019 07:33:41 -0500 (EST) Received: by mail-wm1-f69.google.com with SMTP id f21so2478747wmb.5 for ; Fri, 01 Mar 2019 04:33:41 -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=uOm44ZPpB9rn8G8GtWahqqVEz6QNSs5qK6hT9eVLhMJz8ocWCHDFJiNcWfv2BBe0Gh kjB9NILBG8U3CDgiFYRvQhkCdmTwSM0bNDMDzOpmab2xGuyKN/S3FXpRPenHa10gHD0C roeo46ht/g39/ZURe/W13mxo26Dyg2V8YRnrM+c1Z8P6P5iFlPNydZ/ADVUO6QChnPIZ jz5DxUdsA5zOZ/kVezMnp72t9fqpHFs2K0K1NeX5JxnYWONnSnf/ZBDalO7Vb6VJ/Kfx TJklVmzDAkbumS6ZcKUQ2QImf02R7SYozpfzEl/g/2WzxjyxXUrcV/EmDGlQ5Yp7rxrk LDOA== X-Gm-Message-State: APjAAAUjPrwgiod6JxeB4I1IEy/m9DER+8ZyofJCfdBCmUteC9v9CEeD bk1pYRXMRGPceBmHQ5AjQVFIUWv+s93Jkg0HlI3JkxCpmLt9rAaRB4krS8uC9lK0erfzUF39PWK JEzC1ugV+MznP47LBtsmxM5Dma/HD1cb5aUY+CSTewMr8SVJOlUYy8pvxl3acrsgbeA== X-Received: by 2002:adf:dd8a:: with SMTP id x10mr3438747wrl.117.1551443621393; Fri, 01 Mar 2019 04:33:41 -0800 (PST) X-Google-Smtp-Source: APXvYqytjqQbe3S1xxLTJSBEdcFq9YSpr98wTnF1ukWFOAQAOBPzZqhfvUyG+t4QxIrWFhq9eKq+ X-Received: by 2002:adf:dd8a:: with SMTP id x10mr3438682wrl.117.1551443620316; Fri, 01 Mar 2019 04:33:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443620; cv=none; d=google.com; s=arc-20160816; b=ha9MqPe6bocmOCcGMTcHmMGxWBU3rA5y/dVHFRIDD3ykW18HwZ0R8N3g7CPE84TG4K vSd11Nl2oKk8zd/AdpS0LoLqw9OBQQmx+AhGEzTe8fF9aycWcaD9CA/04OPK4/akY+NI eqraRGXELA8iJgCARDJLceQUXwJfti2lzto92rE7Tb1r8xJpx/z+tWS2nwmSjhvYwuoX X0WhOj7ltM8WBLk3De6kMy2dQxsJLGAnBMRyxUJFayc5l0V2H/LJUL8rKr80fYvZmhIe 0ipwfYOI0Hk1mEEwQnm2NKlQbFmPUbDkTzYUUkR9/K6liwbSsugTigw6hoxzwl43uoeP qTIQ== 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=ewStUKkF5DwT4ePTWDe+N2evmWE93Yr6Ie53iyQk2rES00ocnWnuw2r+rLGejBOI9c /KSKEifHNHBue6kmGoBA8C4zKXwz8AGPzUlFiyD3U5+AOqBkyZA4Vy2Bt9yAKMypA3X7 DP0s8GNZ1Zqb46HQ6WUjXaqC2uckL/n12n0n+89CzVKE5/vF9mMD0ZYxYe2g36/7jCLX Zha4mAeS4Qfp9sf14++McrsCYPr33jOAEQbRRs7WOte8mf8WLj86hn6F20nm0ptErRfI pU1HFPMPVvUltmJs4y9K91lD5w8K5+NIY9gO3weBlk+aSaO3EX3MbPrTy8YZ3m+3Bx/S SwnQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=UoyezeC4; 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 e7si13601877wro.168.2019.03.01.04.33.40 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33:40 -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=UoyezeC4; 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 449pkB3nFkz9txrl; Fri, 1 Mar 2019 13:33:38 +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=UoyezeC4; 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 GNQHZWQb3DZC; Fri, 1 Mar 2019 13:33:38 +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 449pkB2hDpz9txrh; Fri, 1 Mar 2019 13:33:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443618; bh=hTJrfrNY8LS5ZO8s8Ac31/wAdL77hGVOtcoy12Rml60=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=UoyezeC4Nkg7VNVUYh7Ecn5ckHsefqvJAUs3xCw146U5PqPKaDlTS59zIUgSE74nd mM09balArJe9Macn9bay6HhE5CG2VwysPNRCyFygJT6NVD+Dv1XLXp26aeec9PFgI2 vTxVCKUy6xAMy0YeKfQz4/00GNHF3vRzfxW1qoUA= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A72678BB8B; Fri, 1 Mar 2019 13:33:39 +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 bwV5OrdEw_e1; Fri, 1 Mar 2019 13:33:39 +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 403AA8BB73; Fri, 1 Mar 2019 13:33:39 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 24B736F89E; Fri, 1 Mar 2019 12:33:39 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33:39 +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 Fri Mar 1 12:33:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10835167 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 D14C3922 for ; Fri, 1 Mar 2019 12:33:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BFA822E786 for ; Fri, 1 Mar 2019 12:33:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B341D2EB40; Fri, 1 Mar 2019 12:33: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 C89AD2E786 for ; Fri, 1 Mar 2019 12:33:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EB17C8E0005; Fri, 1 Mar 2019 07:33:43 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id E39E28E0001; Fri, 1 Mar 2019 07:33:43 -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 C91608E0005; Fri, 1 Mar 2019 07:33:43 -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 5C9958E0001 for ; Fri, 1 Mar 2019 07:33:43 -0500 (EST) Received: by mail-wm1-f72.google.com with SMTP id u74so5062575wmf.0 for ; Fri, 01 Mar 2019 04:33:43 -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=dSVLXTPEXq7bnW9AFmocf0GlUsDEEK95KVvyKUXL3MKRDHMJFT/WRZ4yPNQUq4MAez YPANO+FgycIXWe8gOvSjktADwcNO5R+PS1SD6jSj8wETHww3XnauZTTJA5fqsI4xKGDw GNwEcr55dpm1PchNKNeSox+wfa3FgM4pVMlYaMiqrX4QmCwF+3sqXAtbLmp6I0elCn0J tPKeflw1XGDaXChPwL8y9I/i96wskmsGYGswS8UZe4bkwuwf2/ToNMeO+WNNze6xl17Y T33N5ug59rx8jF+lPrsiH4T1bEcPZs9oXZqZUguiAwxfBxKv22PAvgXgSh/RNFOQyfe9 tWtA== X-Gm-Message-State: AHQUAubEEIx9TfKrDus9SCeW3rnYJizNCMqLZqFet/NvwOCupvLBIJoM CF4C+2BJouH3SYTQQns15jW7lM1/WCkZMbrCQGa6/klGvTNj92yf7IYZhxYQgqGvwRBzmxwWbLA JbGPzB1Ykgdio/QEaUWmg5WtLFs4xjbODWJ7bSJMloUPIewxCXbjyE4zfsaEonlmMQQ== X-Received: by 2002:a1c:1b4e:: with SMTP id b75mr3230082wmb.88.1551443622767; Fri, 01 Mar 2019 04:33:42 -0800 (PST) X-Google-Smtp-Source: APXvYqzHzxst6+mht/1ouayLhjTcMSoaLXyJnyDTdH1Uw6Pek1k7f7E1zD2ImCpTpjyvNETrTI46 X-Received: by 2002:a1c:1b4e:: with SMTP id b75mr3230020wmb.88.1551443621403; Fri, 01 Mar 2019 04:33:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443621; cv=none; d=google.com; s=arc-20160816; b=eJtE5a4kG1LW3bj3TmIJMXChzyNrlFAgfW4lmbm+AaFtCZBV/j/OrP7EZrFsFlSBjI DlMaycP6j+VQGJJcpv/uwWOng8GK7255N91wMmi/xYFqiYNER3dTu9Er74qWl+X90yCb d+Yhx7JJddbBD+4Zc56WOvJxBkVG9pUcTFZXeuzBH5Dppns5bZipaoG2BIm2oEpwQVkH h02kNVUptNNsxVuryQ19UD1C1V5Ft88An8ybSzdZISNzJ488jt9WCZ1TrM4l81L9XBOu dhVOL6WN+h9ckbW2MJM7YxRAY5SQuTSPDxpUt4pggQBQ9ERpZh3i8jnO5LhlCt5Ej48U xVSA== 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=jxKYC9p52W1npHUL9xsyXwAiKbA8wliphRu8V9GpWCiycxT8qJ7RXtnR/eau9tm6Au Ozazv7xM/+VpkUHHVS55L343h25mlMBQXosMc2zNcspLfhI58AXWeUfdwu+bCGmKTLXq dZc/WNpjcdXxn4923EbC0KvAxHTwfi8cstihzLcIujFHnbUPOAWBGuMQO30T+NHHrMHE YUUh/6ODJYssxKGD9EzKK8WHjSgPkKoOLzpbq8qQi3qT9uM4WgiqTEsa/HLuCEDSIzET 2LJTgRVxl92it3HSXQ5jEQ9QPk9yB05NhZS1xQQweW+ulKedIXUNUW/1iyr8LxH55LwP I3aA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b="Ox/AiarF"; 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 11si16076921wra.351.2019.03.01.04.33.41 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33:41 -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="Ox/AiarF"; 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 449pkC3n53z9txrm; Fri, 1 Mar 2019 13:33:39 +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=Ox/AiarF; 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 4RtBwWFAp-_J; Fri, 1 Mar 2019 13:33:39 +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 449pkC2dX6z9txrh; Fri, 1 Mar 2019 13:33:39 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443619; bh=oHghTvnVgM5iLsW9vWXEequS4LO8QERrM8ZuJ6h5wq4=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=Ox/AiarF809wzNzai7YMor3ryQecfgKl7EnSVgXl/Ih33okydX0edWsRpa9ZgI5yj 6zuNEQNMSiopwdmvT8gL8g+wZquwhsjU7kimbSfvRSjw4VGf4uday8nh9WTNVoPjhj 4mOZ93oOCpJnYJhM1F9HRAspUIgC7uYwbRAuxyoI= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A28478BB8B; Fri, 1 Mar 2019 13:33:40 +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 EYN79-EvJTH1; Fri, 1 Mar 2019 13:33:40 +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 4C1C88BB73; Fri, 1 Mar 2019 13:33:40 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 2B4716F89E; Fri, 1 Mar 2019 12:33:40 +0000 (UTC) Message-Id: <45fb252fc1b27f2804109fa35ba2882ae29e6035.1551443453.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33:40 +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 Fri Mar 1 12:33:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 10835169 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 483EA1390 for ; Fri, 1 Mar 2019 12:33:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 353852E786 for ; Fri, 1 Mar 2019 12:33:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 220E32EB40; Fri, 1 Mar 2019 12:33: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 0B6152E786 for ; Fri, 1 Mar 2019 12:33:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9892C8E0007; Fri, 1 Mar 2019 07:33:45 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 8E0918E0006; Fri, 1 Mar 2019 07:33: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 7633D8E0007; Fri, 1 Mar 2019 07:33:45 -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 ED64F8E0001 for ; Fri, 1 Mar 2019 07:33:44 -0500 (EST) Received: by mail-wr1-f71.google.com with SMTP id z4so11426874wrq.1 for ; Fri, 01 Mar 2019 04:33: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=0QUiUDKjGToLpkzDPACzHo0JlotDF22Jf4TM6PGaWLw=; b=QZNxKqj+WaQQd9T/1j1yDe63a3gy4mXCys9SLReIiLE2mUskPnETGRTzR+TuQMuE5N 9oZajZWdqE8gLi1twbiqBTqnr2YBdecH8lEkGaXDrPYlgoQ/KTIbTJh7A//3UjEtt5QY +tPUOBzT0Z6xmWLcPNGruKW4IPMb2mRoJ0CU27q+dWUMztRE40ikTVlVhLeYemjkPoa0 RsoclJMYwniqInMNYWyZCWzsG2/ruo0olmUn4igBXuKALMEOgluuXcXqQ+Lx5qY0Biai M5TBwZzLfBJNq+psgF8cLLPyYGW20O9z5eeSZ8SLJ0il4Xel1Em/5qX8UKeySR4NPlfH UHkw== X-Gm-Message-State: APjAAAVSBpJFIT1+blzPBqcQ87rKA413Bw8CCoEdxm0GjBhk2kPM90cm maBZjameiMgA38GkBbwzQelwknWsulZaOghD6dmiIGBL//OWf2wY57h48mHWQOtTyFBtSPZfbXU mOfWUlpHuGpiwYVgbDxiw/PDTF0CCIpdynMTGCzCf8LhqmZPFozZNFMvQi+aJoCpKag== X-Received: by 2002:adf:eb85:: with SMTP id t5mr3332742wrn.168.1551443624419; Fri, 01 Mar 2019 04:33:44 -0800 (PST) X-Google-Smtp-Source: APXvYqzvrCtZRm8P2GFBKk1Wj9Z/g/Z20UO5D6J5K/8lHL+oHrgZZ6/Iybby+RN14gOnmnFhDKvw X-Received: by 2002:adf:eb85:: with SMTP id t5mr3332644wrn.168.1551443622444; Fri, 01 Mar 2019 04:33:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443622; cv=none; d=google.com; s=arc-20160816; b=MxAc1WRM7bsCC+qkUAGWIrirHSKO4l6epaXaCkdi7BplhokS8PUbdhestYSnJioFQ/ 07mC0bLKO9TGoin1jB0UQyUyoh/brhzDq6yLe0lKAcPvnZq+rvdRnM+EnXXTviwZbb+d +kiIUGVVnqEpIGEruY8iRylVSU076rHrDV0Ahp0A3RzP8LFNzkjfjgrI6zhxS2py/aou 06ikX/dQTCTwUFLiaZiZUVHNQ/N4PVb+4h31i31W6oG3/kBlwXKT4jRfd47K9R9MdMcA K0SgyQy3nKdNwfpcDsEmQiQzrFH3V3SWjQKyDcBcyigEDS2NBiV2NERkKVsxvUQeobYj LwEg== 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=T81c8wyl+vND21Zz49SO9b8QRmH6RzRFTlrhJW4OiPrrrzDEDhPbhaKGbNtzVn0o4e vyIIlZHbsi6CBUau8o7+mcD85i3ZDVmfnPJz/QP4sBtWslGul6MfoEJIylHt6rP+3o5F 6bt7BWgrQ/cPHPr54yjiwJbZUwmWGBWE2OyMAPyDWr9xB6oMFCBUPmYG//RAUODf5U51 TNH5SlYUMl0+dQPtJgKk7BpFjt1NTxTUjz8CCGi0DGoKRCNRqmSObTfrFYEJWR6gKRKR wH2F9R8e7LiWaqrdK9ywfifgdyypz9VRdv46qK5DH5tp5RUxJ0lS/4osnUNdePqYZvvM C+RQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=v9kqy2TA; 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 q4si13945703wrp.25.2019.03.01.04.33.42 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33:42 -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=v9kqy2TA; 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 449pkD4Rssz9txrn; Fri, 1 Mar 2019 13:33:40 +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=v9kqy2TA; 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 DWJymdTfFfQW; Fri, 1 Mar 2019 13:33:40 +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 449pkD3CVZz9txrh; Fri, 1 Mar 2019 13:33:40 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443620; bh=0QUiUDKjGToLpkzDPACzHo0JlotDF22Jf4TM6PGaWLw=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=v9kqy2TAqMWfCMMdvvNVtDyUxJv19Sh30W3J2g+N9YHpPrnqbE7R66XvOJUaK2Pso BsSKeOUuWVL9rU/jQem9AOwR+VR0aaw19d9Zl40Jh68LYqf3KDtehTS3gHlq1gNrmr p8cA+r+m7/h+Fjlg36Morer+wiRizRDxSxhsT2/U= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id AB5AA8BB8B; Fri, 1 Mar 2019 13:33:41 +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 OepXajyN4_1V; Fri, 1 Mar 2019 13:33:41 +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 4BAD48BB73; Fri, 1 Mar 2019 13:33:41 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 306BA6F89E; Fri, 1 Mar 2019 12:33:41 +0000 (UTC) Message-Id: <4273ac930057465c321431c9307637981588eb05.1551443453.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33:41 +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 Fri Mar 1 12:33: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: 10835171 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 F127F1390 for ; Fri, 1 Mar 2019 12:33:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AAEE1237A5 for ; Fri, 1 Mar 2019 12:33:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 954D0205F8; Fri, 1 Mar 2019 12:33:56 +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 289CD20174 for ; Fri, 1 Mar 2019 12:33:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BC7658E0001; Fri, 1 Mar 2019 07:33:45 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id ADF1A8E0008; Fri, 1 Mar 2019 07:33: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 86A5B8E0001; Fri, 1 Mar 2019 07:33:45 -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 174008E0006 for ; Fri, 1 Mar 2019 07:33:45 -0500 (EST) Received: by mail-wr1-f70.google.com with SMTP id h65so11389903wrh.16 for ; Fri, 01 Mar 2019 04:33:45 -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=SphO1/PPMIasVuSPIc826pl+smPxtGhCY78yPltpoasCy5wBZ7TTPY5UOv8i59ZtxJ 9ER581Q/FHADYITm9k4tP5jGTCblq8S/zlrKa0+X3qODLp2dAlSWgkzS4jfIIzu+kGW9 OSEnXWtJdbMbX5RTDk9TTqKrWGJCmbrmZGEKdmy0pkJ4/c786F9xWUBVuvCK7vXk6/XD LOEoX/qVKGcXlRQeFaCgqzwW6Fbps88VyA39qwJp/hbfkhl3E4rv3dCxsGizMajYSXYI 0WN4WaBpo+rMATj0iEfJZsAJq7X/fqLMffLtI1xdy4oD4rIP3PbFxNxCzWssFp0nj0eD JkaA== X-Gm-Message-State: APjAAAXX0dEugIbckZwbow06tBEMfsbruzkUs04+vIBfO6Y9xz0aHohI IQb2PEVVoLQ7U+htDY7kYFyjM+ePPZ0X6GYl+5/WLXZ06A0NEApJIGp2rlnsrmIb6u9HI6dzocu QtMXhsBpG6cQqJ3a7LVIfjeY7I5h4QJMmfFPB8LDs/qEfnAA+zgkxQs8WL8mQkZ8zpw== X-Received: by 2002:adf:fc12:: with SMTP id i18mr3190806wrr.201.1551443624565; Fri, 01 Mar 2019 04:33:44 -0800 (PST) X-Google-Smtp-Source: APXvYqxrTco2IhxtXCR7hUXfaTFkjV0b01dFXvW/HEXEpfn5U3NoPkeIGf2M0e3b1n7AuykYmnkq X-Received: by 2002:adf:fc12:: with SMTP id i18mr3190746wrr.201.1551443623379; Fri, 01 Mar 2019 04:33:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443623; cv=none; d=google.com; s=arc-20160816; b=PHIEbrpxT734G2YqV/FRaUJnfW28faVJCsg3/03xYOehhYkUXkyhfR+LalWQgWKGiC TDZl7BjQxmGQQ/GQ4t4uhbP/MyAAlOGI7TNFn+1RAE2N0MVkvvu07iCT7lcNJo3zb0xT PLkSXsH9Wj/+Kkk6wrkrP3gZtPs7wh+jT04ILDGBDvlKHEyueidXuaW4xDd0/Xqbqevm OpN3PkP3HvnoUZSrC9o7oqOCo4+5XzNvKXCRqHDayEm5JtMVSbiaZje+g7TvPQibCfNE zqTmP/n8c/mNh1Y9l4oTBMLfECJLVbsYYKtKSYIbRipD+K3ujxQROn16zfYsyH9qjUjP ieWg== 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=hgOcC6I5nPbsNYZQ2O2g475a3rkAgJ5vd3cuQQ0DunOVKtXbgDzoS6bgb9b1nXyLVy D0xJFgXV6GiwPdxgSK6+g7/l1nA7OWy0vwah+Gl84I87g0PW35H2wa2h/hX8BpI5yWZ6 r5ipvhB3Y5g/coCVnt/TzOTrst8hH3R06XdBrAPluH53VcJNji7Txmr3qhxss9hIq9o+ RAWDZmxJASrwh8G4Oc5mo6bWhvBbkqVJTkC9xZHF0qTKBWUO9q2Kc+xQKI3tuqv/Nr85 3s1H1s6tnRTjo1tGmr9imIlixKtZNTE9X7N2XMAulceiPNUWsVmFQe8icKEusL2hpz91 ZDbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=nn5hog9F; 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 n9si17596940wrg.78.2019.03.01.04.33.43 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33: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=nn5hog9F; 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 449pkF4Drhz9txrp; Fri, 1 Mar 2019 13:33: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=nn5hog9F; 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 NhfshISpNCAD; Fri, 1 Mar 2019 13:33: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 449pkF33c0z9txrh; Fri, 1 Mar 2019 13:33:41 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443621; bh=g6fhwCUzzCOYhxsR7m9Lo9kcYtSGDH5kmO2yLp27uXY=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=nn5hog9FmupqvIer8UZXuu5YWMe3YWuc/LU+tdF//9x0G3Miq3YDC3iu7tYfmPbY7 L5B8RPu9XRAWdlLNZcLYb683D/xU+ATOAz7Qqqj+2ul6EAVDFkI4o/FvtlH4TkzpHN 4rjYplkWt2HUg1ShZgb75mMpLyJJH6VF7Bug/2xY= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A36618BB8B; Fri, 1 Mar 2019 13:33: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 3wNDqyWP9Mo2; Fri, 1 Mar 2019 13:33: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 525E08BB73; Fri, 1 Mar 2019 13:33:42 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 36C5B6F89E; Fri, 1 Mar 2019 12:33:42 +0000 (UTC) Message-Id: <7cd5cc904c0a77f573a0fe116b3464d4f38c7aea.1551443453.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33: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 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 Fri Mar 1 12:33: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: 10835175 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 F37FD1390 for ; Fri, 1 Mar 2019 12:34:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DE3A8205F8 for ; Fri, 1 Mar 2019 12:34:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CF224251F4; Fri, 1 Mar 2019 12:34: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 669F5205F8 for ; Fri, 1 Mar 2019 12:34:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 58ABA8E000A; Fri, 1 Mar 2019 07:33:48 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 49C758E0008; Fri, 1 Mar 2019 07:33: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 2588F8E000B; Fri, 1 Mar 2019 07:33:48 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by kanga.kvack.org (Postfix) with ESMTP id B3CE98E0008 for ; Fri, 1 Mar 2019 07:33:47 -0500 (EST) Received: by mail-wm1-f70.google.com with SMTP id q24so5060554wmq.9 for ; Fri, 01 Mar 2019 04:33: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=FcoH0MWZdtOBuC7W/yk0A9+bmiNTMQTCcIimrSkyq24=; b=VM2dFMt3vyMrzahBl5aywl3+jqDAwztgkh8EsvKbnH4sQgBM9gzYB04OYZH285TxFM Jbj/t94hz3Y/Yfk6HIyKxLXmEgqC6GJC314DXDzozLjq6UQJV7sB54LOzMWn5EhZ/rmi VgzFLl8QVeFMjMLfKu3nPhtxDxE6lqrWSX+HXAPaaQ6NxsafJt31MOR+V1RWAeSvlMmB NU//z4aoPn/HjbThnT1FJ72JFMxZR2FjYqqLRMSrzVq6QkFBOxfndgD8jAJ70AmZucI9 9SEcWnBhUbKxV2cVIxC8hV6hhZ4gMgzLoNuagpvKyABtSgUIGe+LQ2VvQAZjZIvIKkj4 kq4Q== X-Gm-Message-State: AHQUAuZQY31DXAdWkLiIqsReChaxQp4UPgPCtrxh96omG0NPBVsgEJTS LZFz0cnaualxXwt2/fCYaC/CMuxTaqmGbmLhPS0gnszqpZawnHpowmpYIqRgtCl014DLzM/zQx1 VP/sr5demlpIBf3pKUJXftbXVAZCiF1jNxS+0M/9ZqcKYX+hdMqg9rYFJG8mCwpL5mg== X-Received: by 2002:a1c:44c3:: with SMTP id r186mr3109904wma.63.1551443627162; Fri, 01 Mar 2019 04:33:47 -0800 (PST) X-Google-Smtp-Source: APXvYqxyHMd2oL3ls4UDwrP9EsIZX5pA/DDNOHqeeg0etScRLUGuB/xp+T5fSyfOEfZKBQCmGcvp X-Received: by 2002:a1c:44c3:: with SMTP id r186mr3109783wma.63.1551443624252; Fri, 01 Mar 2019 04:33:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443624; cv=none; d=google.com; s=arc-20160816; b=d/fjMOnfIeXSi7qAuDqinOThbHpxoqYN4gmp9Xuf53bDeeFjGavgay1Ymn/fYXKSHY QnMPkDUFoMO8acZ8rGf/PRBpfUqjABEZ/QdjVXV/JSTd9oYQq9oFZZr1z0R5XcaPKw/t B8KiPji8w8jpVxiMozyUKsqfZJAyQn2AoI8IcMlgm2wpuLVIWlvX32GzPieccNK6mW/q 3GMIB6vfGL3/WRLZ4Eyt/It4X1CC1jV8pK06OBtogHu32pSrWvkfp85hZnC3dYzhOamK 8L5jfztHTF05sO5B4UHi8MKitZKbCmQFVV/tLpiZPClVr0pn6f7NkIpx+HVyicRql2Tc xAaA== 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=b7QAIE4nukOcT9AMCYOMZhi1lyUfOn32+9OC/RBtDgf1gcsnqHtw4zzEPn/qsbPWjG Ib2OWtngvZ3615e+I7744pLT5Yj9eYR+1eMa0osMJeLIvSqmHYldOyQSQcPD+9dTNm/g HoHVXV+n2GJaniXbwYWEdn2csP3SokHoQbms16bE0fygJyhAiSTfzpdd3db6+vZC9Hfx 28reyBUo5JbX7pRgcZYFbX4W/xpDIKhcI723TFL8yoJJEUmG8Jt5iuiapUAdV6xl8EyE ker9AA00LwPEygbEL9qeuOOIq9nVoYLBxI9nKZ5fsawVDW73nbUKTQbc8kChsHCFwnqN xcOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=rybuktLB; 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 q15si5119865wme.79.2019.03.01.04.33.44 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33: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=rybuktLB; 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 449pkG3qKmz9txrr; Fri, 1 Mar 2019 13:33: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=rybuktLB; 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 7fh6xtct_1Ud; Fri, 1 Mar 2019 13:33: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 449pkG2lcbz9txrh; Fri, 1 Mar 2019 13:33:42 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443622; bh=FcoH0MWZdtOBuC7W/yk0A9+bmiNTMQTCcIimrSkyq24=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=rybuktLBqTBbP5JYSCuz5k6KxvrQheL8FM5pOdWxhSLBzmveOkS1mAgRCBi8LKncy UEH9iOedKdAZZOeqRlElTiI8SzAeztUUL1ZV5ANzdBw7+ZntaKX60Hsrk+OFy6IQ6S CXjw07kftkLCuuK8z4kDMVfzlE99g0cNGBla9/Cg= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 9F9518BB73; Fri, 1 Mar 2019 13:33: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 7QyMtoFXDvp0; Fri, 1 Mar 2019 13:33: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 647948BB8B; Fri, 1 Mar 2019 13:33:43 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 3F9AD6F89E; Fri, 1 Mar 2019 12:33:43 +0000 (UTC) Message-Id: <9718764d2702d89df6de6e9607e5e53256f766c1.1551443453.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33: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 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 Fri Mar 1 12:33: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: 10835173 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 88D9A922 for ; Fri, 1 Mar 2019 12:34:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 776EF205F8 for ; Fri, 1 Mar 2019 12:34:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6B84F251F4; Fri, 1 Mar 2019 12:34:00 +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 E19D6205F8 for ; Fri, 1 Mar 2019 12:33:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 181038E0009; Fri, 1 Mar 2019 07:33:48 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 16FCA8E000A; Fri, 1 Mar 2019 07:33: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 E3DFC8E0009; Fri, 1 Mar 2019 07:33:47 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by kanga.kvack.org (Postfix) with ESMTP id 7EFC78E0006 for ; Fri, 1 Mar 2019 07:33:47 -0500 (EST) Received: by mail-wr1-f72.google.com with SMTP id h65so11389949wrh.16 for ; Fri, 01 Mar 2019 04:33: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=T5roomQKloe+Cr1IT+Xg0/TzN2EQ/rbW1mXIN5nYL+c=; b=sbc494muFcgOXRAn/tiD+ArxWIGugVoiIpsqLf86I7S2XNVS+HMaWjFEIEDS1jTU8W kIxkMdj2O3eLd7Gw2S06PCNJk4MCe9q1DS9mP91v8Gl2z8WTu/ZXZn3Ty3U+dJJUFOLS bBBnlp8enJ7O9KqtHC+FAW/DAfZr+aXiKOoivJZGHOwR+XOen1Ywxfu5KvHVCqrWKE0G mu0sXNTu7nITR57S9k+W6bzuleCdjpOK30UtYC9WvgZKJdi0Ez9xP/hl7ZHJZzFziCjF 3Xtb+UEEqtSnx8MdKLPdfCZX4kevZ893wYFDrLrVt8fqGZrlIVRU8fFYILxhNdwcjFZr c54g== X-Gm-Message-State: AHQUAuY5yw/7nG9ZIK1lzUGJE2Ra1+KpLhvw7pmpEPJnkuZYPgxr3w7f uKK4HRQajIl5UmiiDLt/PNU7YqjmYxJ778Hm0icM+LlCCoyZ87ewqzMYN/O+vewmws7Vs0N4UMO 8uwXtBmUDJW/yTPSmH2dLS2DcHkCnVS1GISSYfCIEYxDYERofR87TMdi5FTjNvjpU/A== X-Received: by 2002:a1c:2545:: with SMTP id l66mr2837419wml.96.1551443626979; Fri, 01 Mar 2019 04:33:46 -0800 (PST) X-Google-Smtp-Source: AHgI3IbVZ4Av7JGGraat45U9vjXLulluh7DcX8SZ9Htt5OaHuFCQBx01drat5JOT8YqU72UhHPnX X-Received: by 2002:a1c:2545:: with SMTP id l66mr2837359wml.96.1551443625466; Fri, 01 Mar 2019 04:33:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443625; cv=none; d=google.com; s=arc-20160816; b=sEbrk5BttY7WknTOnGXfcphS1NLtPGfmhzbovzUliWKJEkGdLlM5B9Ci78yP0VN1kk CBdYFaSbsO+GYJCx3UlA9xpsVl6TwvWa/bx7Cu9Ae144HVZ6QVjPDVuDVoALJvVMTi64 phKpYfjV1tm+47DBVu4yK5nHo74XWwbZBbHyWK5XYXkBLjd3vZmsHKg13D+0Wp/MYd1+ 0VggRsnUWsUGoGTHQ9slCpydNwydNhA+GDq9Ng5Rjzq6tN6kzHzcAUsy7m3f436ubioj 9PPk8sdkXZVD0BHonbW5nRzUFFMx7vdX18pHiSE4FSyF0LafguxtuMTpok5yqsOJT0EQ uomA== 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=R5SgodJziJaA9Ykg6KGOfpyglusduTq6KWLpZ9AuvyXnHxjv9nhcZlNI+rZzk3a/ZS QfX/P53+hxVtw5UuyZmVeg2rkQjUyjIUreuVQ0sDVv886BSp5sNplHJoCJzRFM3Xw3/0 nd/AEpdRksozdyGHrgJboua+RQOVUNhneb00eBtG5B/vA/PTDbk1uNDTfvSzzLGPdoOS OWDQcIANv6h/IVOGn63Vuk6tsNDBGiy73vU/GsUn2K02+uW9aW5VR+HxPF2Zf0HRkFBS 5p6A856VmJ8k0sFwT+ZaeH6TqvQ0MYKFCl6uF+bkB8CaEop8Veew5oIaTjl+MDr62HbB OHyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=V9yDVuOO; 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 v19si4441403wmc.192.2019.03.01.04.33.45 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33: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=V9yDVuOO; 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 449pkH3z20z9txrq; Fri, 1 Mar 2019 13:33: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=V9yDVuOO; 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 WaLy-Q3yGWd7; Fri, 1 Mar 2019 13:33: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 449pkH2jbQz9txrh; Fri, 1 Mar 2019 13:33:43 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443623; bh=T5roomQKloe+Cr1IT+Xg0/TzN2EQ/rbW1mXIN5nYL+c=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=V9yDVuOO6s54csiG0Uu7iG7sHKI/cZ4MueHDZGOsWn0I4WWu6SeeOMophs+O9WhhY SHjpVDKAcZ3g0ylB68KZJVCUcR7NzG92OPLhXApMwesa42L0S4+wCTOs2rm8owTVS2 N7Ok+BurOBBqPEXVJBhkrwQV99oHPfx5+VAB/lus= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A50F28BB8B; Fri, 1 Mar 2019 13:33: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 fMya_PpDFcO4; Fri, 1 Mar 2019 13:33: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 64D0A8BB73; Fri, 1 Mar 2019 13:33:44 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 434CA6F89E; Fri, 1 Mar 2019 12:33:44 +0000 (UTC) Message-Id: <6b79065e99220dc1f01dc37d0112a329902e5905.1551443453.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33: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 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 Fri Mar 1 12:33: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: 10835177 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 533331390 for ; Fri, 1 Mar 2019 12:34:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 41A5F205F8 for ; Fri, 1 Mar 2019 12:34:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 33601251F4; Fri, 1 Mar 2019 12:34:07 +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 A2AA3205F8 for ; Fri, 1 Mar 2019 12:34:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A94E08E0008; Fri, 1 Mar 2019 07:33:48 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 9CBB18E0006; Fri, 1 Mar 2019 07:33: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 844788E0008; Fri, 1 Mar 2019 07:33:48 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by kanga.kvack.org (Postfix) with ESMTP id 12F798E0006 for ; Fri, 1 Mar 2019 07:33:48 -0500 (EST) Received: by mail-wm1-f70.google.com with SMTP id f202so4729569wme.2 for ; Fri, 01 Mar 2019 04:33: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=wOp+cCgsVh5E5KqJ2LQ86dr6R33x9NHGT6pzPUXZ9UA=; b=Z7+VuwHjXh7l6SkfO/aydCQ2WsxS3qBD2hDmLG/dT/F3mMDvm97OnnfvdV6MWEmFa/ +Z55mPtEDeGX06Y+y7SFqoxdJC9OTTm5I+3cTVFrSCfDLMFdBOwhNTzw/OK66jAaioV7 65YgGVc+f9DSjFhoaigtn4UsYBwDcylfsj2/Ywsj7i4tSv5Zc+VrhgLsy355iNyVhvx2 UwWQgkV0vCvCOZb9ldaEvpy2gJh+I6LC/jMwmdj8OUrVdr4EGmHEFGT+i9zMVygJZMwx Rl6liDNt7XUmNcZpIhfhj2/t5wBEunYl+FblMu/fNkR00eJXj61D+R8vm+D4THJ6Jmnp 6Nlg== X-Gm-Message-State: AHQUAua+Y6Yz+D7tJCIx6K0iz2fcpt8o993DGdppz7CiaSjoUTdvIg0J PC2YYornBdhCMpLW2BPA7mN57PomaoD9rPAYnctGnZjW8DfBU5zHugbTK6IelLwp5plxe9nzoBj gbdLWE5ucQYQGjFSZUU9jSE3GogX0Q3qXru6znp+/twdmxt2tWTMPN0YjVO2o9249XA== X-Received: by 2002:a1c:a98b:: with SMTP id s133mr2885287wme.129.1551443627554; Fri, 01 Mar 2019 04:33:47 -0800 (PST) X-Google-Smtp-Source: APXvYqyQd+s++xhnlD2kmDY67ZR26aVdIEMSqMSU5a/giJQQdt5w23T+BDM5zI3rAm2Hff6gCI+r X-Received: by 2002:a1c:a98b:: with SMTP id s133mr2885232wme.129.1551443626414; Fri, 01 Mar 2019 04:33:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443626; cv=none; d=google.com; s=arc-20160816; b=Hy4cSlwimu90mME6vbixH6457ZHvNfAHc03GDRQ5Z9VYJxegP0v+wnBI5av+e09yvf +ZcrbWsjici4hJ6FvcGWLwnSAbZSHf8abJ7fYWeD7ITRM5DT9f5fYEfqo+ODJvOMX4O4 hJNrfLrweEVxPpRjMg9IfPor1zy9uIhdxR+DhPD4HVIZ5w/+Uj/ZPNCxu+NO5ZVOBuW0 tWr9A2pbIbCCeim/4+dVhjb6f9V2cAcNPSfFBoPOC/STmDBZUcnTkwardjE7OQmCvvbO qA0Mlo7h4o3bI5F7w7zH7ykGy3zVpgJOYJPrMqbQt7NXgUU5VfY0yM9Mcse/DITNPSCr HPhQ== 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=wOp+cCgsVh5E5KqJ2LQ86dr6R33x9NHGT6pzPUXZ9UA=; b=dBUMWhmUxyG3hQ/u5HJmiNJZm7CvpuNeSLo0H9fmQUJTriYWzUdYtOkJwxa9+lgL+5 TE6nDMIYFrJ+DK7AvO//5lHfJ7sMu6xWqfUxqQ661mvxIseGgzHcMPfm33TdAE0bB5wC ooWi6NLUAz2ISAM3qJOw6uE174zRwC3AL2p77KEVCR6bWQACWXUz+U5K6fg3U3XHKIw8 4IUsgjPzEzqV3WvDgUaQM+P0c74/tnZwLFSXSUFF5kiTP3x/GXxJzjRTVvtXzgdQHQPa C+sLY3WcjnGPGPzNjeOen4Uss7maw4cYZHX8vmOrLrgE9kwKdhN6Yoalf4i7OyXbKXqK MzEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=ZAXbdIYv; 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 c5si6742497wre.391.2019.03.01.04.33.46 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33: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=ZAXbdIYv; 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 449pkJ4tB4z9txrs; Fri, 1 Mar 2019 13:33: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=ZAXbdIYv; 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 kqsEEKBkVul6; Fri, 1 Mar 2019 13:33: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 449pkJ2yDPz9txrh; Fri, 1 Mar 2019 13:33:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443624; bh=wOp+cCgsVh5E5KqJ2LQ86dr6R33x9NHGT6pzPUXZ9UA=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=ZAXbdIYvIWx53i88f+qr0+QLez8MDSlT6ouKuxWCmXEsPJR8dGE6iPiw4TjDwn/57 uxQtDwYrG9AIAXh08QgcyKTB5rute96CvvW801O/LegcXXZBiGS+DYhGdTQ4mvZW9S oJTxm6bwBRh+tMVTBinRFOwHffyXBfCYYsFL/1po= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id ACB678BB8B; Fri, 1 Mar 2019 13:33: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 Hx9uE9wxRzRx; Fri, 1 Mar 2019 13:33: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 6A0DE8BB73; Fri, 1 Mar 2019 13:33:45 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 49A066F89E; Fri, 1 Mar 2019 12:33:45 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33: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 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..0cfc365d814b 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 - PAGE_SIZE) +#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 Fri Mar 1 12:33: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: 10835179 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 41833922 for ; Fri, 1 Mar 2019 12:34:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 309E3205F8 for ; Fri, 1 Mar 2019 12:34:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 25014251F4; Fri, 1 Mar 2019 12:34:11 +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 8EEED205F8 for ; Fri, 1 Mar 2019 12:34:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 406948E000B; Fri, 1 Mar 2019 07:33:50 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 2560D8E0006; Fri, 1 Mar 2019 07:33: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 034B18E000B; Fri, 1 Mar 2019 07:33:49 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by kanga.kvack.org (Postfix) with ESMTP id 946248E0006 for ; Fri, 1 Mar 2019 07:33:49 -0500 (EST) Received: by mail-wr1-f72.google.com with SMTP id m2so8694592wrs.23 for ; Fri, 01 Mar 2019 04:33:49 -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=qHjQFcVVeHru2fhC+8/drufp5sE6iQINuf1wThf57+ODAjmBj+tSYN536Qtl6LNb3y XSvcB48XbMU6VhTftLycgt0xgeQEMxlWjnZ/5FgHIo6POodxmSfZI4g2UcUtJSVzj9/2 nqVQm+8iM0yBZLXiiS9RGv4AFGF/EkcjUizurfw51Q0RzjnJxJnWYQc5zoDDWALuk+q9 GO+m+YncY96ie25LMRiKwj2MF2kh1oy+ZfGZ6sVed0QL4vzyc6junCkH2TLVOAKCavA5 /g/ixhssgDqmWc6kw4PbCJlzmQDVQKwklbZcazaAN45gjGZUrn4brBxUMQEx8yWkCznB n9nA== X-Gm-Message-State: AHQUAuYwQETlBGPhBNjQElm+nmC8A/mqYtL9oQ4r0m0bSSgQUWgIT4ZF NG/Se1Sk4SuWgC4N8JIgWC3qpk1OBbnaMvtpAA+IEYa83ck66s/sAtTMooDDL+xwSJjELWBwyIW HZDxRrtNwoclJ9IF0PbrFgaiZHRngx5DMm9Sc46Bt30YX02dOKoJj2TIpii6tSPGXMw== X-Received: by 2002:a1c:6789:: with SMTP id b131mr3031699wmc.22.1551443629078; Fri, 01 Mar 2019 04:33:49 -0800 (PST) X-Google-Smtp-Source: AHgI3Ib3v7dc+XIBgs+a84yUDoCPBDthtzAzmzuG+4Lu7PR1WjJCYPvQnRrY9CGJYzH4GsOlLZeG X-Received: by 2002:a1c:6789:: with SMTP id b131mr3031649wmc.22.1551443627927; Fri, 01 Mar 2019 04:33:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443627; cv=none; d=google.com; s=arc-20160816; b=CPrsOJF+gZfNkAdOrve5VXGcnIdxcB/H3P56p21seNxA9B8NYo01VuPYD2pbqlf00N IQ/sxLzHB8N8hn2oOdqL3Smyk5hu1qM56XrWdK7BMc5+wN4fbzEXCRw3lXgX550lYW2c bRc/Sh545DytBU8rnNDBhs2GWuvE5W+2yL5KVKXwFEXQRcJstwYrfmXmLSB5tLvwbv17 CAcO0lqeVQZn3nvSoPLSk2Au53UpRkuWAHey0mVgJMgudn5G4qmbTGbEjJOV+FawMwCm NGbbw7WENJmQY+7a9OrRtvAc0uDc0rR1FkoyiVp3QAdwJphsx/1/k5GSezwd7fNg4hFn yGvA== 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=YC8QjPOTkbL1OhCTp3P0B5xxS7hW/gZJLRV1XQtIZ7+UCK95gCrObsj892217MClr8 md7x39zU5SDx3k54xnMxXaUvLGQaWu3G4932i+m4dVQsd3WyZT41VvqGeiIcx9pGR2zh wmI5SLgpe2RTQpvr6NU7cPJs8RSDRLRz4j5SvsZk4mV8awwTdvPMPpT/HB5UYWCs/tmK R402eUrqtAyUrHgWE7WyltYRVyYV1HqUG0RSeP0w9uM3FthOCU1HsQ9ChGRKWPzC9iqt TcNG7r1Y/SX9YzUq+pOFhxDUQC/ZaLfft/qjrDyEFcX/JobyGZ8KUm4zLDVhIMy3YB5v XU1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=B9i7cTo9; 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 l8si4603943wmg.93.2019.03.01.04.33.47 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33: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=B9i7cTo9; 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 449pkK4h0Nz9txrt; Fri, 1 Mar 2019 13:33: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=B9i7cTo9; 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 gtSNb2Sq3_YU; Fri, 1 Mar 2019 13:33: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 449pkK38xRz9txrh; Fri, 1 Mar 2019 13:33:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443625; bh=mcZlyr+Y9QTQOXdd/Np+U2T6LsmbrnCiae9jtlgpNP8=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=B9i7cTo9rS8TkSt0I214ItZD0m0vcWhi5DjUC6rSiTgM6kGUuRqME2MNr3FLS2kT0 I5GUiUeB7dTCeCOZQbF3B5K7ESQ+NppKo7RsxxePDMF5EIZ/rKTu8bTyN4wJM5oflH +NsIxKGY5b3h6MdbpJ6woa4bqmSu6SZaOjshgMwA= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id B3A1F8BB8B; Fri, 1 Mar 2019 13:33: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 OwCpOqwk-QtK; Fri, 1 Mar 2019 13:33: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 7405A8BB73; Fri, 1 Mar 2019 13:33:46 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 4F0206F89E; Fri, 1 Mar 2019 12:33:46 +0000 (UTC) Message-Id: <2adea63caf38d51f6cfc5b98906c6a3c05f0b8d3.1551443453.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33: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 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 Fri Mar 1 12:33: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: 10835181 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 D011E922 for ; Fri, 1 Mar 2019 12:34:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BC38E237A5 for ; Fri, 1 Mar 2019 12:34:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B028D28534; Fri, 1 Mar 2019 12:34:15 +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 C8572237A5 for ; Fri, 1 Mar 2019 12:34:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D01C38E000C; Fri, 1 Mar 2019 07:33:51 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id CB1B18E0006; Fri, 1 Mar 2019 07:33:51 -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 AB6C18E000C; Fri, 1 Mar 2019 07:33:51 -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 4B0BF8E0006 for ; Fri, 1 Mar 2019 07:33:51 -0500 (EST) Received: by mail-wr1-f71.google.com with SMTP id z16so11517486wrt.0 for ; Fri, 01 Mar 2019 04:33:51 -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=oMzap2j2bfc5OfrfewmFoolVJdX1DDnl6sy2Y4MlHOE=; b=CHsQxLItiuJw0Rl4aydw4WkRQoyLX4AM6/8l6yndl3G0+2yQ8Dtg/8AU83/lXb+73Z 68BgoYN7/2/FVI1xdx7Yuo7wdeOuRrQK2159zg78me9lNr7/l8XH7EEXYTksMozRqb3O XBA5G8glvqfhY5hgtPgak1Z/Kddzh9l3ZeeP0pteeXE/qUe3jbigM6HJ63QZEUzhQNV+ VVziku5s5L/bgE9N7mc92ONof7nVwGoy3Cu2k58/ttsXVZJBvlf+KcNvHxbnpTyiSrbC twKQSQWKTz+wkFjL9QtqBf/W5rh5oTEUmUh2Hnjf9/j+Wd3l8BkM5eXJm1zZGKyGnjNj tS2w== X-Gm-Message-State: APjAAAWXf7zgzSnKrt7Sc0LWxbXg3S7Ca/EImPRSkpTCQR8hVGcYscBz 9qb6DVvXyIYsFEEUZStk00O5SN2frhNvimyfH5fozTxbIaqvvEAkdrtEMsLC1tVC6P4kEiD59su 3PwQbD86LrYVtUtsI7hWsTQLKccgcmrWFz1KyrpckLl5wxJtxzbPj17R9J4ixQ4nDJQ== X-Received: by 2002:adf:f786:: with SMTP id q6mr3122570wrp.125.1551443630781; Fri, 01 Mar 2019 04:33:50 -0800 (PST) X-Google-Smtp-Source: APXvYqw1G9nZ6/tBjzFgqkEifW83uvHNYzWi3KNCe3TPes39caKT8UptgBYhwrnbxIl8zWcZsJFo X-Received: by 2002:adf:f786:: with SMTP id q6mr3122484wrp.125.1551443628965; Fri, 01 Mar 2019 04:33:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443628; cv=none; d=google.com; s=arc-20160816; b=jhxfmjDpH7/vdzmbH0eaVr5Uvv332GyDITKF3vnwSP7LWRg0WtUyqqcAOk1XVrBY1Z jqPpwjGR4OhgZbRZeIS6WwNNsgnI5RUS/VhJE4GmwRva7vRoU0Z73rx6le/a3JiY71Vb 0OBFOs2/A7by/x56MkkzqY7Uh3RRVsWk6NdVmCTFh/27huIA65Mu4T/0YvEYAhtEcNPp uFp21SsxCVlilJ6RavwbBwqpoqKmshrg7a+eXmhEAiHvd1weMu7OJUYUA8dzegFuWAlz PWcZEV2Pp+sR4Q/SckWGdoQv7fTC/JgP+NYuuEvWtcfAgOq4zln9tRks/lqJ3/elxsTr Pyzw== 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=oMzap2j2bfc5OfrfewmFoolVJdX1DDnl6sy2Y4MlHOE=; b=Tw7ZJgV22hB/erKHeoOQcE/ysWnnl7Gz3yrYYmOLm5i25OZxfpXAPjXVtZkaFuAmIC zjjs6XT5QhULRaxryyLTJXFGertVQ6beaQDg8awndzDDf6HjIfwHKXZVvb9uM7N5Z/Nw db6JUOHD2ntVLhdHuI3WBf+8ePsrnnP4GadKuBJ2a/KNlpX5jZBu0egO7sS1sCAmpK3M M17a2eGLXwoXQicY4Mm4Amz2pE03a+aBfiNJI0Mj1osI4NZzZC0z138C+OPs91A5vKjG EKDiwVA3mCuydPt4Msxj8puyOWvN/9VlE5bAhXcR08khBfT0pLmHBuGgqfXKG2ttqbi6 QfEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b="aaexGiu/"; 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 x9si4788722wmg.120.2019.03.01.04.33.48 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33: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="aaexGiu/"; 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 449pkL5vSYz9txrv; Fri, 1 Mar 2019 13:33: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=aaexGiu/; 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 kr5qCgX4g2El; Fri, 1 Mar 2019 13:33: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 449pkL3vZJz9txrh; Fri, 1 Mar 2019 13:33:46 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443626; bh=oMzap2j2bfc5OfrfewmFoolVJdX1DDnl6sy2Y4MlHOE=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=aaexGiu/WoGgObW+bWaWKVPW+f4rj7Qlw1xc5ukojxgg6L8bJmzWkJqGwmV9NmaAq qHzzLGZyVkJOC68xOocSq4Cm36iBUcghh+VBereWlsuLIPekp0NiIi9rBe9IO8S6wi rLTfwB8+rREzBxRtXTUp1BJd2N49ldBUUjO/txtQ= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id CABCA8BB8B; Fri, 1 Mar 2019 13:33: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 ySIhsT3bajqr; Fri, 1 Mar 2019 13:33: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 797498BB73; Fri, 1 Mar 2019 13:33:47 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 56A5D6F89E; Fri, 1 Mar 2019 12:33:47 +0000 (UTC) Message-Id: <4e09cd6e3ca628a1980739129a9b7f4a92f1b61e.1551443453.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33: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 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 | 152 ++++++++++++++++++++++++++++++++++ 11 files changed, 184 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..cc788917ce38 --- /dev/null +++ b/arch/powerpc/mm/kasan/kasan_init_32.c @@ -0,0 +1,152 @@ +// 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) +{ + unsigned long va = (unsigned long)kasan_early_shadow_page; + 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, va, 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); + __set_pte_at(&init_mm, k_cur, pte_offset_kernel(pmd, k_cur), pte, 0); + } + 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_kernel_range(KASAN_SHADOW_START, KASAN_SHADOW_END); +} + +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 Fri Mar 1 12:33: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: 10835183 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 D09D71390 for ; Fri, 1 Mar 2019 12:34:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BEAC2237A5 for ; Fri, 1 Mar 2019 12:34:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B2DBB28517; Fri, 1 Mar 2019 12:34:19 +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 25F89237A5 for ; Fri, 1 Mar 2019 12:34:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ADDF08E000D; Fri, 1 Mar 2019 07:33:52 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id A674D8E0006; Fri, 1 Mar 2019 07:33: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 8E28F8E000D; Fri, 1 Mar 2019 07:33: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 292088E0006 for ; Fri, 1 Mar 2019 07:33:52 -0500 (EST) Received: by mail-wr1-f70.google.com with SMTP id p3so11298269wrs.7 for ; Fri, 01 Mar 2019 04:33: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=iDP7gsyvcqTo9RdhF5mvEcZHsCZ/UEXVBMDee0rR734=; b=tl3o6YNr+hbp9we5u1XGaUQacC4OSUs/cJf25aB2j9TGx/vU4pzoW2BXV86oWaAwiK W6Kv3KWlP4N/rqhGGpWY7PZgES6e92aiF31yKGAQv6/mmM7UBIKHYaL7zAm0QITK7D7x 7vtYoEfrb76LVeopvfkXeChZcfHlE+ulfj87kSSI3RDvR9uMzRSw9FIgu9lVI/20kfA4 E8uqvcShy5Ll8g5CQ0A88t+MgP2A0+0g0Ng61L5isW4KNqiTIWCFvlcE37aBCdo3APai Ctsz/e3ig7k80hPzGM9x2zW4pCwJXqwbkAS1JsG7ifYb6a9bPrQTU4YrpyMsrgVxcHYl /c0w== X-Gm-Message-State: AHQUAuZd7rtN8v6IS8qTlFeomYFh6vmOW2Y/uzRiTS1ZfesdY5HDiF2M j766jgOpg8/gWbmJjjp4GjGyz6ttbyCl+QrmzT73o6bx7VQ7k5e7kYHl4yDK1jl4Y6TsWLXQQ2d N5n+RIxDFCzwZ3LxcacnirErj4TI+OvhIomItbt6FBxV03ZsbZwIRDd7UAY4owpQ2Hg== X-Received: by 2002:a1c:a186:: with SMTP id k128mr3014812wme.54.1551443631617; Fri, 01 Mar 2019 04:33:51 -0800 (PST) X-Google-Smtp-Source: AHgI3IbCAHQjneH2tk/wxXrzMSbkDxtfpXiLTi/38iAdq0K4Ts88Na5rkwAAkOHlWqYTdc+NMFGW X-Received: by 2002:a1c:a186:: with SMTP id k128mr3014742wme.54.1551443629841; Fri, 01 Mar 2019 04:33:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443629; cv=none; d=google.com; s=arc-20160816; b=vESunvf7qGSRM5XI//7+/e0gGRTDhcQcMMjNKE8kb9FTWdqjkqhuw2fRCJrC5DbP91 8j8Rx71uvSW5ihjppOGDgZrVD+kCq0QJs9imE/WMyIwID8cMYDzNlE4gJv+JJ7mPg+Yn GZ6BbrcOHjBebdXOku322EDFmyMhi8zQF4scAojOFB5PJyTVwgwchgugCfz4t7r/vZpp eLdS8CXqyuRAm/Vor4A7+F/Na6H0asrHszfWU+zFRDAcTGgAX8wX1CbJrhrgn1GdVX1p I9a5JU9YhJZ0qJsKVmB+5SjXc2S9DvtU55boavf5WsuH1eCymln2izuX3p+jbDJQuiL+ Mxwg== 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=w+xEEi2SZpJC9b7EJFaMpZZH6edG5jCSqNJAgNsVkJhCJrcd7qwvnucX1tH7f78M/S 3a9T4EOeN7UuqpA5+dUI4vZL29t57IH5kjgpl1pghbx1awBBwQOWod44qJDJgeDwRhR+ o8NALjubY7655VpQE6J0ARalTbuGzLc9ElSEHDDywYS4fmGITsw7C97Gvrvv+PPy7xMy WYHfEpxGl97iLGDMP5fq89UmqagWcUM3p7hAx4+zuAuqC1rv3xjvZAvVK3kad0Uh+TU2 /fpGEj3Pwrx42xuZTApuR1tA89y2R78l1bO39x8XjA6681TbHYBFMSFT0HSmVqcYw/ke 6DGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b="NHKG7N0/"; 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 d6si78026wrv.172.2019.03.01.04.33.49 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33:49 -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="NHKG7N0/"; 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 449pkM5ygtz9txrx; Fri, 1 Mar 2019 13:33: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=NHKG7N0/; 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 kgZlPUTjQ4vs; Fri, 1 Mar 2019 13:33: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 449pkM3mBtz9txrh; Fri, 1 Mar 2019 13:33:47 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443627; bh=iDP7gsyvcqTo9RdhF5mvEcZHsCZ/UEXVBMDee0rR734=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=NHKG7N0/a2VHnWnssuQPDjyqdh8s+45CBeHJAWULfSNKeDCxRXNaBh6L+HWRSU6lG is+W1ZOteFBe8xziEsvJxKrnhJNkT9cYhZ7GsgfXxb4FnlRBn2WjVxccTD5OZCc12H agPEkw2VHiHTFkCPrRqWuxwIVjPZX8HvZWVD9aKI= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id CB6118BB8B; Fri, 1 Mar 2019 13:33: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 STarbLg2zQUC; Fri, 1 Mar 2019 13:33: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 815AA8BB73; Fri, 1 Mar 2019 13:33:48 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 5C7226F89E; Fri, 1 Mar 2019 12:33:48 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33: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 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 Fri Mar 1 12:33: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: 10835185 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 1195E1575 for ; Fri, 1 Mar 2019 12:34:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F369F237A5 for ; Fri, 1 Mar 2019 12:34:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E752028534; Fri, 1 Mar 2019 12:34:24 +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 22765237A5 for ; Fri, 1 Mar 2019 12:34:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5B1FF8E000E; Fri, 1 Mar 2019 07:33:53 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 536D38E0006; Fri, 1 Mar 2019 07:33: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 3D8A58E000E; Fri, 1 Mar 2019 07:33:53 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by kanga.kvack.org (Postfix) with ESMTP id D58F88E0006 for ; Fri, 1 Mar 2019 07:33:52 -0500 (EST) Received: by mail-wr1-f72.google.com with SMTP id m2so8694658wrs.23 for ; Fri, 01 Mar 2019 04:33: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=SbRyFF+pV64b+XRgQ6Ve2az6+06FWhJBNHkEXCWvzd0=; b=hsi7snnH770v+mQS5YiE4XhVGdxiFhSQZlxg96XA2+3s49VRDVIhrsFbAEMihP5xD7 KQ33EqXdB7L384lRsRdoJDZTWxHMR0T4OFGt6KxkimV0mzwWBbBZg2Xt/nW1EEGFksfH +9z5DXT0l8uMoOtyL8lWjl94RRh7096UlP4PNBOWomqHLtLbgrMek/SeIRreqdN8JSn6 OyqZrFQUK/02H12vY30e+XWgvwqYQLO+6+c4OX6qr0PDaA9j64VJ12hwAIYRJBynmUhy /yE6xfNlZmzv+0qcPiLN93V+UjeQGAEx9fuvEyh3rJLTQCW+R7r5PTbCAWP02rfocriV dFjA== X-Gm-Message-State: APjAAAUbmsJuZ3a0TVQqotv0btFrjwgJGWTqvZ5jhk6LaBWqZBkIscng AR0/DOyLjIsy7HioIOO+BrEqzmRUzEnKjJefMct1iJH+Z85l8TLJll/aJ0TjfpaNrhUlcSM/8rN vwXRQQKB4byOBjS+ra6YfBF1AGGxJQHgDIFsem9SbjzVV0s0mTxBE85IaJI2snm34qg== X-Received: by 2002:a1c:ce46:: with SMTP id e67mr3178259wmg.40.1551443632351; Fri, 01 Mar 2019 04:33:52 -0800 (PST) X-Google-Smtp-Source: AHgI3IbbwWLwnVr3MK72/w4PUYxLwUXVSCi53Hw1Y0rWa/Ili5vmxlhE0RtF1G7UqcR6C1gMmvIV X-Received: by 2002:a1c:ce46:: with SMTP id e67mr3178184wmg.40.1551443630580; Fri, 01 Mar 2019 04:33:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551443630; cv=none; d=google.com; s=arc-20160816; b=tp+wDFUNPmiMB7vMfFDW5b+R7lp4dvAMa/5El2HNPmqRQJiuASAgUhGXfC6upNJQv7 tDiPxajOtRDLVnJEkRDj30yg8S97AyuJh1ABlMAa5irar5YLy/2wg1tYHaldigLaiMgF JsKdvlQLzONqSt7l3pLmoV53dE/lvEzHM9iyrzBgJesx759bONpH7AgM2G5IgD9N8COW Oi9/3g4R9PtFRzBbhzxUAPmdetcS2DdZPmaOU8C50fPGTlKV7Y7VicR0LWR4B8frgypD 53ZFBQl179E8tiJUTunaztTIFpkgPH3Jui2kRdpRqXZ57y0ubE0BcFNbW4m9SrxgkpEW uDjA== 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=SbRyFF+pV64b+XRgQ6Ve2az6+06FWhJBNHkEXCWvzd0=; b=Wk7Z9ZpVKA1pthW8Id1VsxIKOnUQecUZ9NyjesQvUOX1O5x4x8zLojgyghk9rNvxuU dzEjJynOTqCG1xQyPGxK7eEFBb44knEHyvf86wlko0jSlglaumwxrIrnQHpw8bulhOBZ 4Vs6Hn5yNze9BQ4SbOXki+z5k+1dLz6kj9ugFtbC6B8pcD3fFxM7HJ5PjQL2k5e+CNWg SXuT2ZX1+yWGAlDpen6i1s0snycBNq4la+ProL//j21kiZEb7RxHJEBI692nHJeQw992 79iOro9VAUOycUTNlxLMuZ1lMxek9+jFtOqNdB/IaNInD+LRyUkl9bsdUnby4ECKeu4+ P4jA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=jQUGSbxf; 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 s13si5303221wrp.282.2019.03.01.04.33.50 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 Mar 2019 04:33: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=jQUGSbxf; 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 449pkN5gT5z9txry; Fri, 1 Mar 2019 13:33: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=jQUGSbxf; 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 KzUCUZQO2WVe; Fri, 1 Mar 2019 13:33: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 449pkN4KsQz9txrw; Fri, 1 Mar 2019 13:33:48 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1551443628; bh=SbRyFF+pV64b+XRgQ6Ve2az6+06FWhJBNHkEXCWvzd0=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=jQUGSbxf0n0BHfFduSfo3NlG+yVSjD8Emfm3IACUY5XPk61g6vu82FjB+kRroKVl8 BawcNfSoPUbiQty52jKX3SfxYLUeL3Lk6/dAdYvZ85sUJJjaaDtWVJS9AHzhPxRi4T 5OVgaVJ5/lWknEbvruc7F7tvzJ55Wz3YjDyQAh6c= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id D43E68BB8B; Fri, 1 Mar 2019 13:33: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 riH7IzGJt6Ky; Fri, 1 Mar 2019 13:33: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 8844F8BB73; Fri, 1 Mar 2019 13:33:49 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 61C9C6F89E; Fri, 1 Mar 2019 12:33:49 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v9 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: Fri, 1 Mar 2019 12:33: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 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. This is done after memblock get available but before switching to the final hash table, otherwise there are issues with TLB flushing due to the shared entries. For hash32, the zero shadow page gets mapped with PAGE_READONLY instead of PAGE_KERNEL_RO, because the PP bits don't provide a RO kernel, so PAGE_KERNEL_RO is equivalent to PAGE_KERNEL. By using PAGE_READONLY, the page is RO for both kernel and user, but this is not a security issue as it contains only zeroes. Signed-off-by: Christophe Leroy --- arch/powerpc/include/asm/kasan.h | 1 + arch/powerpc/kernel/head_32.S | 43 ++++++++++++++++++++++------- arch/powerpc/mm/kasan/kasan_init_32.c | 51 ++++++++++++++++++++++++++++++----- arch/powerpc/mm/mmu_decl.h | 1 + 4 files changed, 79 insertions(+), 17 deletions(-) diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h index 74a4ba9fb8a3..c9fe0369a8fc 100644 --- a/arch/powerpc/include/asm/kasan.h +++ b/arch/powerpc/include/asm/kasan.h @@ -29,6 +29,7 @@ #ifdef CONFIG_KASAN void kasan_early_init(void); +void kasan_mmu_init(void); void kasan_init(void); #else static inline void kasan_init(void) { } diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S index e644aab2cf5b..7f7fbdd73b79 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. */ @@ -961,6 +981,9 @@ start_here: bl __save_cpu_setup bl MMU_init BEGIN_MMU_FTR_SECTION +#ifdef CONFIG_KASAN + bl kasan_mmu_init +#endif bl MMU_init_hw_patch END_MMU_FTR_SECTION_IFSET(MMU_FTR_HPTE_TABLE) diff --git a/arch/powerpc/mm/kasan/kasan_init_32.c b/arch/powerpc/mm/kasan/kasan_init_32.c index cc788917ce38..f6dbc537c051 100644 --- a/arch/powerpc/mm/kasan/kasan_init_32.c +++ b/arch/powerpc/mm/kasan/kasan_init_32.c @@ -39,7 +39,10 @@ static int kasan_init_shadow_page_tables(unsigned long k_start, unsigned long k_ if (!new) return -ENOMEM; - kasan_populate_pte(new, PAGE_KERNEL_RO); + if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) + kasan_populate_pte(new, PAGE_READONLY); + else + kasan_populate_pte(new, PAGE_KERNEL_RO); pmd_populate_kernel(&init_mm, pmd, new); } return 0; @@ -60,10 +63,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); @@ -84,15 +90,26 @@ static int __ref kasan_init_region(void *start, size_t size) static void __init kasan_remap_early_shadow_ro(void) { - kasan_populate_pte(kasan_early_shadow_pte, PAGE_KERNEL_RO); + if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) + kasan_populate_pte(kasan_early_shadow_pte, PAGE_READONLY); + else + kasan_populate_pte(kasan_early_shadow_pte, PAGE_KERNEL_RO); + flush_tlb_kernel_range(KASAN_SHADOW_START, KASAN_SHADOW_END); } -void __init kasan_init(void) +void __init kasan_mmu_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); @@ -104,6 +121,12 @@ void __init kasan_init(void) if (ret) panic("kasan: kasan_init_region() failed"); } +} + +void __init kasan_init(void) +{ + if (!early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) + kasan_mmu_init(); kasan_remap_early_shadow_ro(); @@ -131,6 +154,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; @@ -148,5 +185,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 */