Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp8117220imu; Tue, 4 Dec 2018 03:17:50 -0800 (PST) X-Google-Smtp-Source: AFSGD/WoefL3Ocy+ZepxSkyvAwBJWVhcfdf2zhrCzG5t0KQgo+eQjqtpP9gLKUmxJWKzjF0OT0Sp X-Received: by 2002:a17:902:ab84:: with SMTP id f4mr19131300plr.207.1543922270350; Tue, 04 Dec 2018 03:17:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543922270; cv=none; d=google.com; s=arc-20160816; b=njIMa24Kff/CtBdxAs8my+v5fYDB2MWM0D+6OJD+WDNWu8CGNahjM7sMo4u1dJLycj gnQ73V7RDqMK/xgVWtrbEz33PSAuLxvreBohyTnt5d1gpYECYVXJN4v3ASbidwB+fO44 jKnnv68wAIfSg2JA07dg+2SJ91E0w8S08h1tM8ct6f0JCKjZS7++j7IWgeQQqr0gOxLd V3UIPRSLs/rPXuRGTLzrsCojhk1XiSNWmL134KbbdqXWsJXBUnM/SKCcaCEV4lAps5EI Ed9igiqhH+UkMTCCULbw1QC7I0sEYzhymAzFwqBt9qG2nodba56o2G6NWKxY3VU3yO3C hVHA== 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=H3beYAcdiypsjd++5jC1M6+rEu7CdlH95H6Y0tT1XIg=; b=gSpo7+DjBAJmwKJHzB7VSMF6u3G9fKva2gPmg5FeFVGGUaDm/c5oJ/xNJLI/BslkHq lKKjEEiDrZNxm5EVXKKwXNClkBCSJW5v5HZHnmZ2hEQavB5Ab8iRV2VuVrOzEHPnue9Z y1DdPTxf38eDYvnmSoEpWGKhLO9D3YAZASgTX2kYHV3rgqogxOT+4TPEDEI4wWJj7jV1 XjkXG8sIgJqyZZYvrqQ8kF+BMJgayoLR8xS6zEUbO/Oynnmd01hN6221Ut2hV7MiHoM9 IMYOFf0eriBsnpkejuHA3KtcOCFHeQefkLIRaD7WdVOhuDSby32VBeVwCc7HTMpd7vJM XaqA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="Nydzm/e3"; 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 e4si14931454pgl.570.2018.12.04.03.17.35; Tue, 04 Dec 2018 03:17:50 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="Nydzm/e3"; 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 S1728251AbeLDLGG (ORCPT + 99 others); Tue, 4 Dec 2018 06:06:06 -0500 Received: from mail.kernel.org ([198.145.29.99]:54172 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727931AbeLDLGD (ORCPT ); Tue, 4 Dec 2018 06:06:03 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.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 4450C2146D; Tue, 4 Dec 2018 11:06:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543921561; bh=g7EEZbdziOOQZAcERDVvn0B1fGXHuYfZ09Nv7csU6Ts=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Nydzm/e3ELSutM011UQqT43O2KljabUhM3ecpqAvWhs+YDWTP2HGIwkYWxiT2Fwzk uFwbDY1SIhWVG/pZCDblYhRELZgx8M4ww4MTCAnGffdw4me1COAocGGXBWl/QKzHP6 hTpKMiatskl+wiPKtn44PHZnDsur7mWvcENov4mQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thomas Gleixner , Ingo Molnar , Peter Zijlstra , Andy Lutomirski , Linus Torvalds , Jiri Kosina , Tom Lendacky , Josh Poimboeuf , Andrea Arcangeli , David Woodhouse , Tim Chen , Andi Kleen , Dave Hansen , Casey Schaufler , Asit Mallick , Arjan van de Ven , Jon Masters , Waiman Long , Dave Stewart , Kees Cook Subject: [PATCH 4.14 102/146] x86/speculation: Split out TIF update Date: Tue, 4 Dec 2018 11:49:48 +0100 Message-Id: <20181204103730.926914577@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181204103726.750894136@linuxfoundation.org> References: <20181204103726.750894136@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: Thomas Gleixner tglx@linutronix.de commit e6da8bb6f9abb2628381904b24163c770e630bac upstream The update of the TIF_SSBD flag and the conditional speculation control MSR update is done in the ssb_prctl_set() function directly. The upcoming prctl support for controlling indirect branch speculation via STIBP needs the same mechanism. Split the code out and make it reusable. Reword the comment about updates for other tasks. Signed-off-by: Thomas Gleixner Reviewed-by: Ingo Molnar Cc: Peter Zijlstra Cc: Andy Lutomirski Cc: Linus Torvalds Cc: Jiri Kosina Cc: Tom Lendacky Cc: Josh Poimboeuf Cc: Andrea Arcangeli Cc: David Woodhouse Cc: Tim Chen Cc: Andi Kleen Cc: Dave Hansen Cc: Casey Schaufler Cc: Asit Mallick Cc: Arjan van de Ven Cc: Jon Masters Cc: Waiman Long Cc: Greg KH Cc: Dave Stewart Cc: Kees Cook Cc: stable@vger.kernel.org Link: https://lkml.kernel.org/r/20181125185005.652305076@linutronix.de Signed-off-by: Greg Kroah-Hartman --- arch/x86/kernel/cpu/bugs.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c @@ -699,10 +699,29 @@ static void ssb_select_mitigation(void) #undef pr_fmt #define pr_fmt(fmt) "Speculation prctl: " fmt -static int ssb_prctl_set(struct task_struct *task, unsigned long ctrl) +static void task_update_spec_tif(struct task_struct *tsk, int tifbit, bool on) { bool update; + if (on) + update = !test_and_set_tsk_thread_flag(tsk, tifbit); + else + update = test_and_clear_tsk_thread_flag(tsk, tifbit); + + /* + * Immediately update the speculation control MSRs for the current + * task, but for a non-current task delay setting the CPU + * mitigation until it is scheduled next. + * + * This can only happen for SECCOMP mitigation. For PRCTL it's + * always the current task. + */ + if (tsk == current && update) + speculation_ctrl_update_current(); +} + +static int ssb_prctl_set(struct task_struct *task, unsigned long ctrl) +{ if (ssb_mode != SPEC_STORE_BYPASS_PRCTL && ssb_mode != SPEC_STORE_BYPASS_SECCOMP) return -ENXIO; @@ -713,28 +732,20 @@ static int ssb_prctl_set(struct task_str if (task_spec_ssb_force_disable(task)) return -EPERM; task_clear_spec_ssb_disable(task); - update = test_and_clear_tsk_thread_flag(task, TIF_SSBD); + task_update_spec_tif(task, TIF_SSBD, false); break; case PR_SPEC_DISABLE: task_set_spec_ssb_disable(task); - update = !test_and_set_tsk_thread_flag(task, TIF_SSBD); + task_update_spec_tif(task, TIF_SSBD, true); break; case PR_SPEC_FORCE_DISABLE: task_set_spec_ssb_disable(task); task_set_spec_ssb_force_disable(task); - update = !test_and_set_tsk_thread_flag(task, TIF_SSBD); + task_update_spec_tif(task, TIF_SSBD, true); break; default: return -ERANGE; } - - /* - * If being set on non-current task, delay setting the CPU - * mitigation until it is next scheduled. - */ - if (task == current && update) - speculation_ctrl_update_current(); - return 0; }