Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp8130792imu; Tue, 4 Dec 2018 03:32:31 -0800 (PST) X-Google-Smtp-Source: AFSGD/V2Y80iUYYHazw232IX64A5Gi10AhF11diXbwioIRev4/vIkOIsn3bYYxLwPonD4xxL3nxV X-Received: by 2002:a63:a611:: with SMTP id t17mr16252460pge.338.1543923151032; Tue, 04 Dec 2018 03:32:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543923150; cv=none; d=google.com; s=arc-20160816; b=wxr760Z32tq2YJaANknKfegxYlvQq3Bc7Q3WNFEdrq43MPebkp/vHY4Ok5VOPmhBPv z0rDG+EN8g8lQxsChtQ8dqUFP1VJukiTh/Q+xxHMbTQjXWqFOhA3j3Hg/3NBQOSgEAe1 B1VTf87tv/jFuONH3JfSyf/439S6hJy7nIikT7Q71UzCDZ5drt0rzCDYbDpuHarTrrLz MMyLbegne57dy0d9QCJ7oqD5tF/U0tHOUahElI5qfG1bwYARHKpQt+lMtikldcXMHkRP PNejKKMs3yRzNndOYqz9wnErgrqSEqcPJaX1im+cH1eosAOkggIicI4HV0G6FRw9PiIf MZyQ== 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=8mssVAbJfVPPtew+a9+NBWqM7JXzm8qBRVK2wJmKs8Y=; b=DfoLL91wrJQqK7D3mpCEK7rKGzxHsd2bihpw6+G2/H/Cd/creAsTOUo8C/YmHvnVyM CgSnCAoQsf0VL/EoPkdZ35tioPsiuPlhThOWcA2ZR8JCWSzzcvQITnJ8zoTDMQ5Ryzzf IWSeTAZwwiG1knWODIysW4rOgLsFDyExbQqZwTLM64jDoqJEqjSyBRh+3cwh2ihYuIHN GXl9T8/8Fbo0qTltUR0qX3pT/NiEWsK5BrQqbICvM6NTZ6uOw2YoHAg+tkAcp5LFBCD+ tCUDnhXqE5cPkVcY+71iRBeLisT+GRTDQrMfunKVFt6Ggz5PbOEvVQwrM73vjVG1J5Zv u2nw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=G3IJsRgh; 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 l4si15184479pgr.346.2018.12.04.03.32.14; Tue, 04 Dec 2018 03:32:30 -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=G3IJsRgh; 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 S1726700AbeLDK5R (ORCPT + 99 others); Tue, 4 Dec 2018 05:57:17 -0500 Received: from mail.kernel.org ([198.145.29.99]:41030 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726681AbeLDK5P (ORCPT ); Tue, 4 Dec 2018 05:57:15 -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 F1D82214DB; Tue, 4 Dec 2018 10:57:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543921034; bh=geR1AF6GiEwi8hVn0yZTcuDcHhlQJEi0LT6ZmNYDxKw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=G3IJsRghcqPDmcnRDKUu0oUrxPksBMD4SFQ7jUjYqcH1oo80TYmcp2czftUCoZZ+C GO2ZoPePu3+amVo5GTyzs6xta9OKuUk65scO9Pig7+ht4gZQJ5Xh1BxuCOBHziW7FH zQ2efqaBonnsn3A22V4Pu7Obn/eMdHNLJQW7p1Xg= 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.19 055/139] x86/speculation: Split out TIF update Date: Tue, 4 Dec 2018 11:48:56 +0100 Message-Id: <20181204103652.238238402@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181204103649.950154335@linuxfoundation.org> References: <20181204103649.950154335@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.19-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 @@ -700,10 +700,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; @@ -714,28 +733,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; }