Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp492822yba; Mon, 1 Apr 2019 10:23:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqxE+QE9452eWooo9AmSnlTVyDN931UibD6HwOKhdd7cF4JOAye+XxYdnDEmXD0AqzKn7u6v X-Received: by 2002:a62:1a0d:: with SMTP id a13mr429264pfa.198.1554139401179; Mon, 01 Apr 2019 10:23:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554139401; cv=none; d=google.com; s=arc-20160816; b=Esmv0Vxcx45q+biAcVlOED/Mp7Gzt2tnvn8YkuxP7rvO52qKLt0WMxJxutKMMKPE50 oT3ViJTYIutzjv02IWiCdBwrqwEvxM+EXytnD08BTcjpVvF3ToBTjjZgAu3vWWvAnGTl y1lZuoC/Ga3Pyutj16iAJSu8OGMNvV/7qT/nz9GO6JNxqikl6tbNIeynjUdoMBzDw9VS eyy87qGkEFkjAOFrUlKkvzHCXVlLrQ1oTgPwO0k17rKzQbrCYYf4I3MFtWHXuo4fSaon YaRc1FUZ/DVQMBJcIhgNs6WYDsFDfn9TAT0J+oWWnNh6cxcR0R1F8s6ECo+4YU8xMZV9 7d8w== 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=yyG/E72UKmBWqQDsgVmI/JfYBgvHVB+9XY4h0D4qLdg=; b=xWh7LuBExORLQyuFnagzUC6JEm484yv2ydIsGKSrMkeLqib4qDK+KxOoPvCdezPNbd PSOQRB+LKuxvS126ekVCXUsSnvhPjD7VLY44KNcWRk6KNVINWGFDvTqougiQmvpyhlvL z0Z+Z4w77pbxTCZMHGlpsnIwG2QZrSRp5hV0yV4peUYHwnA/EUWpr7odLkurlBbQ1zp3 UHdMO53Jrlu5NPNqmO4j5YxzkPnM6EazRZofCOr30rXJeTAapz/aJBux08UDzUaWyT8u GEfTKQu/lIETPNThF0QG5TvkwFPHq7qcmSyIKteAccOY0ay/iR1kdP4BHJ250Jm12jOk fCNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="T/ttWxmZ"; 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 x6si9213307pga.310.2019.04.01.10.23.05; Mon, 01 Apr 2019 10:23:21 -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="T/ttWxmZ"; 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 S1731756AbfDARVH (ORCPT + 99 others); Mon, 1 Apr 2019 13:21:07 -0400 Received: from mail.kernel.org ([198.145.29.99]:49580 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731748AbfDARVG (ORCPT ); Mon, 1 Apr 2019 13:21:06 -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 990D1206DD; Mon, 1 Apr 2019 17:21:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554139265; bh=ceCn19XWJ/LnWV/d8WIVvlSmehNhEpK96qr/J5Q7fJM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T/ttWxmZLJIEP08TCzs5Va1gZ4q1uuHz/irMTdb09e+Q/wnH5c+RgUIJqiMMCgy+p grU+XGpxwE20Ru1rDQg8kPDNsrUMRFsdsHPFhZ8T2UZ7lBHtkIcPx2Q3As7pAamM9N NzQU5B4ondkoIu9yNOtJ6lZSMNQr5Jx8tvA+rjaw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Michal Suchanek , Michael Ellerman Subject: [PATCH 4.14 025/107] powerpc/64s: Patch barrier_nospec in modules Date: Mon, 1 Apr 2019 19:01:40 +0200 Message-Id: <20190401170048.021853496@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: Michal Suchanek commit 815069ca57c142eb71d27439bc27f41a433a67b3 upstream. Note that unlike RFI which is patched only in kernel the nospec state reflects settings at the time the module was loaded. Iterating all modules and re-patching every time the settings change is not implemented. Based on lwsync patching. Signed-off-by: Michal Suchanek Signed-off-by: Michael Ellerman Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/include/asm/setup.h | 7 +++++++ arch/powerpc/kernel/module.c | 6 ++++++ arch/powerpc/kernel/security.c | 2 +- arch/powerpc/lib/feature-fixups.c | 16 +++++++++++++--- 4 files changed, 27 insertions(+), 4 deletions(-) --- a/arch/powerpc/include/asm/setup.h +++ b/arch/powerpc/include/asm/setup.h @@ -53,6 +53,13 @@ enum l1d_flush_type { void setup_rfi_flush(enum l1d_flush_type, bool enable); void do_rfi_flush_fixups(enum l1d_flush_type types); void do_barrier_nospec_fixups(bool enable); +extern bool barrier_nospec_enabled; + +#ifdef CONFIG_PPC_BOOK3S_64 +void do_barrier_nospec_fixups_range(bool enable, void *start, void *end); +#else +static inline void do_barrier_nospec_fixups_range(bool enable, void *start, void *end) { }; +#endif #endif /* !__ASSEMBLY__ */ --- a/arch/powerpc/kernel/module.c +++ b/arch/powerpc/kernel/module.c @@ -72,6 +72,12 @@ int module_finalize(const Elf_Ehdr *hdr, do_feature_fixups(powerpc_firmware_features, (void *)sect->sh_addr, (void *)sect->sh_addr + sect->sh_size); + + sect = find_section(hdr, sechdrs, "__spec_barrier_fixup"); + if (sect != NULL) + do_barrier_nospec_fixups_range(barrier_nospec_enabled, + (void *)sect->sh_addr, + (void *)sect->sh_addr + sect->sh_size); #endif sect = find_section(hdr, sechdrs, "__lwsync_fixup"); --- a/arch/powerpc/kernel/security.c +++ b/arch/powerpc/kernel/security.c @@ -15,7 +15,7 @@ unsigned long powerpc_security_features __read_mostly = SEC_FTR_DEFAULT; -static bool barrier_nospec_enabled; +bool barrier_nospec_enabled; static void enable_barrier_nospec(bool enable) { --- a/arch/powerpc/lib/feature-fixups.c +++ b/arch/powerpc/lib/feature-fixups.c @@ -278,14 +278,14 @@ void do_rfi_flush_fixups(enum l1d_flush_ : "unknown"); } -void do_barrier_nospec_fixups(bool enable) +void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, void *fixup_end) { unsigned int instr, *dest; long *start, *end; int i; - start = PTRRELOC(&__start___barrier_nospec_fixup), - end = PTRRELOC(&__stop___barrier_nospec_fixup); + start = fixup_start; + end = fixup_end; instr = 0x60000000; /* nop */ @@ -304,6 +304,16 @@ void do_barrier_nospec_fixups(bool enabl printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i); } +void do_barrier_nospec_fixups(bool enable) +{ + void *start, *end; + + start = PTRRELOC(&__start___barrier_nospec_fixup), + end = PTRRELOC(&__stop___barrier_nospec_fixup); + + do_barrier_nospec_fixups_range(enable, start, end); +} + #endif /* CONFIG_PPC_BOOK3S_64 */ void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end)