Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp494633yba; Mon, 1 Apr 2019 10:25:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqwVL5D7shZHmeHxmGF1/J/r/io8J1S47fRoJ0zw6Ro/xznzBL4P+Gl/F6vk3EpmMOKxRnGq X-Received: by 2002:a17:902:a607:: with SMTP id u7mr7521843plq.66.1554139542605; Mon, 01 Apr 2019 10:25:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554139542; cv=none; d=google.com; s=arc-20160816; b=wC7yOnweLAN7liAKg0xAqQGH0jKRnuOa/N1p1H0rH4MPhpf4F5s31HB3L+4XNA6s7k tqhXTRKwe9sAIusK2QGJaEk8Czso+C0DI/OfLfHpv9ve8L1N5sld06UEz2oR632UUsjj 3c+qlpSB8RGmc0DNwXO75iZwyHCyeEG4/Yl0fcDcakNIN9zQHhMRlf2O59uQolIT05j6 WFK9Uw+VEj501jl/9ydywQC2zPj/VTEpAeCsPNZDcylyBgnuoaKwqQuQDuaERcMLAezP p6vbDJ9r7ssiv4I6Uz2QBVElXGfScBkXDIVaqH0B9l9ZNlosJ2ajjA8GczKecIThmBdN wU2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=fwAxB4ZhbMuvJkjQ2bfBHWe3VmWrYbc6Ut/yYineF5A=; b=fJ5vGUUSCGDx5O+AXQ1XwAMF3xkuRfKpKifDpDrCArFqRzEqoLrR0ws82IJs3/P/xq hDpViAiOj2AMipicV9DRHqTKH8GtyIrPX9WGOx6kN+RNAJorDh19EAKAtTSw4sWAiHwG 5X6U36beM3aoiHd6bcZK+CWg8ClEcEH4uptxeadwMyIp/XRL6XubKrzn2xhi53fp4U4X OfQe3+j6LrYvSDdUwTKDNp1XKD7XX/5W5ZeA9Yqsge/rvdggGtIgSSiai6VcTB2MDAEF tifzvre1IOB7Rq1K1WK47I2ynhPc6N04jBnw193fMWx32Qy1z9n8QuYwd7LA6uExGUZn Pqiw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=s+qBl1QV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s35si9275057pgl.277.2019.04.01.10.25.27; Mon, 01 Apr 2019 10:25:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=s+qBl1QV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731537AbfDARXn (ORCPT + 99 others); Mon, 1 Apr 2019 13:23:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:53598 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732140AbfDARXk (ORCPT ); Mon, 1 Apr 2019 13:23:40 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4AABF206DD; Mon, 1 Apr 2019 17:23:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554139419; bh=+9d5ZseOoMwxFiOAdxZ6Bo362qgmjPjxpclEmQX6md0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=s+qBl1QVxFvoR1HK+wvbp04yBFuMBE7wnrlF4Cn26XYyyBqxWWlDVxpG0BgTvEJ4i znCt0UMYUaAfMV1dZxR9d4aTavyBBXKdv6gR2uRZPo5EDq0gPUZbHBQdhX7ggXHtQ9 aO6cm8MWLiKRZXkGoZ7I4DWKl7C1HCY6DJ7HEnKU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Diana Craciun , Michael Ellerman Subject: [PATCH 4.14 043/107] powerpc/fsl: Add infrastructure to fixup branch predictor flush Date: Mon, 1 Apr 2019 19:01:58 +0200 Message-Id: <20190401170049.547049830@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190401170045.246405031@linuxfoundation.org> References: <20190401170045.246405031@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Diana Craciun commit 76a5eaa38b15dda92cd6964248c39b5a6f3a4e9d upstream. In order to protect against speculation attacks (Spectre variant 2) on NXP PowerPC platforms, the branch predictor should be flushed when the privillege level is changed. This patch is adding the infrastructure to fixup at runtime the code sections that are performing the branch predictor flush depending on a boot arg parameter which is added later in a separate patch. Signed-off-by: Diana Craciun Signed-off-by: Michael Ellerman Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/include/asm/feature-fixups.h | 12 ++++++++++++ arch/powerpc/include/asm/setup.h | 2 ++ arch/powerpc/kernel/vmlinux.lds.S | 8 ++++++++ arch/powerpc/lib/feature-fixups.c | 23 +++++++++++++++++++++++ 4 files changed, 45 insertions(+) --- a/arch/powerpc/include/asm/feature-fixups.h +++ b/arch/powerpc/include/asm/feature-fixups.h @@ -219,6 +219,17 @@ label##3: \ FTR_ENTRY_OFFSET 953b-954b; \ .popsection; +#define START_BTB_FLUSH_SECTION \ +955: \ + +#define END_BTB_FLUSH_SECTION \ +956: \ + .pushsection __btb_flush_fixup,"a"; \ + .align 2; \ +957: \ + FTR_ENTRY_OFFSET 955b-957b; \ + FTR_ENTRY_OFFSET 956b-957b; \ + .popsection; #ifndef __ASSEMBLY__ #include @@ -228,6 +239,7 @@ extern long __start___stf_entry_barrier_ extern long __start___stf_exit_barrier_fixup, __stop___stf_exit_barrier_fixup; extern long __start___rfi_flush_fixup, __stop___rfi_flush_fixup; extern long __start___barrier_nospec_fixup, __stop___barrier_nospec_fixup; +extern long __start__btb_flush_fixup, __stop__btb_flush_fixup; void apply_feature_fixups(void); void setup_feature_keys(void); --- a/arch/powerpc/include/asm/setup.h +++ b/arch/powerpc/include/asm/setup.h @@ -66,6 +66,8 @@ void do_barrier_nospec_fixups_range(bool static inline void do_barrier_nospec_fixups_range(bool enable, void *start, void *end) { }; #endif +void do_btb_flush_fixups(void); + #endif /* !__ASSEMBLY__ */ #endif /* _ASM_POWERPC_SETUP_H */ --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S @@ -164,6 +164,14 @@ SECTIONS } #endif /* CONFIG_PPC_BARRIER_NOSPEC */ +#ifdef CONFIG_PPC_FSL_BOOK3E + . = ALIGN(8); + __spec_btb_flush_fixup : AT(ADDR(__spec_btb_flush_fixup) - LOAD_OFFSET) { + __start__btb_flush_fixup = .; + *(__btb_flush_fixup) + __stop__btb_flush_fixup = .; + } +#endif EXCEPTION_TABLE(0) NOTES :kernel :notes --- a/arch/powerpc/lib/feature-fixups.c +++ b/arch/powerpc/lib/feature-fixups.c @@ -347,6 +347,29 @@ void do_barrier_nospec_fixups_range(bool printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i); } + +static void patch_btb_flush_section(long *curr) +{ + unsigned int *start, *end; + + start = (void *)curr + *curr; + end = (void *)curr + *(curr + 1); + for (; start < end; start++) { + pr_devel("patching dest %lx\n", (unsigned long)start); + patch_instruction(start, PPC_INST_NOP); + } +} + +void do_btb_flush_fixups(void) +{ + long *start, *end; + + start = PTRRELOC(&__start__btb_flush_fixup); + end = PTRRELOC(&__stop__btb_flush_fixup); + + for (; start < end; start += 2) + patch_btb_flush_section(start); +} #endif /* CONFIG_PPC_FSL_BOOK3E */ void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end)