]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Nov 2019 10:26:02 +0000 (11:26 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Nov 2019 10:26:02 +0000 (11:26 +0100)
added patches:
x86-speculation-fix-incorrect-mds-taa-mitigation-status.patch
x86-speculation-fix-redundant-mds-mitigation-message.patch

queue-4.4/series
queue-4.4/x86-speculation-fix-incorrect-mds-taa-mitigation-status.patch [new file with mode: 0644]
queue-4.4/x86-speculation-fix-redundant-mds-mitigation-message.patch [new file with mode: 0644]

index bfc628d42050f184013f2e0d125117d6563b1447..6abe95bfa2ae67ef1f833b456158fe687a4264cb 100644 (file)
@@ -105,3 +105,5 @@ ocfs2-remove-ocfs2_is_o2cb_active.patch
 mmc-block-fix-tag-condition-with-packed-writes.patch
 arc-perf-accommodate-big-endian-cpu.patch
 x86-insn-fix-awk-regexp-warnings.patch
+x86-speculation-fix-incorrect-mds-taa-mitigation-status.patch
+x86-speculation-fix-redundant-mds-mitigation-message.patch
diff --git a/queue-4.4/x86-speculation-fix-incorrect-mds-taa-mitigation-status.patch b/queue-4.4/x86-speculation-fix-incorrect-mds-taa-mitigation-status.patch
new file mode 100644 (file)
index 0000000..ea50553
--- /dev/null
@@ -0,0 +1,154 @@
+From 64870ed1b12e235cfca3f6c6da75b542c973ff78 Mon Sep 17 00:00:00 2001
+From: Waiman Long <longman@redhat.com>
+Date: Fri, 15 Nov 2019 11:14:44 -0500
+Subject: x86/speculation: Fix incorrect MDS/TAA mitigation status
+
+From: Waiman Long <longman@redhat.com>
+
+commit 64870ed1b12e235cfca3f6c6da75b542c973ff78 upstream.
+
+For MDS vulnerable processors with TSX support, enabling either MDS or
+TAA mitigations will enable the use of VERW to flush internal processor
+buffers at the right code path. IOW, they are either both mitigated
+or both not. However, if the command line options are inconsistent,
+the vulnerabilites sysfs files may not report the mitigation status
+correctly.
+
+For example, with only the "mds=off" option:
+
+  vulnerabilities/mds:Vulnerable; SMT vulnerable
+  vulnerabilities/tsx_async_abort:Mitigation: Clear CPU buffers; SMT vulnerable
+
+The mds vulnerabilities file has wrong status in this case. Similarly,
+the taa vulnerability file will be wrong with mds mitigation on, but
+taa off.
+
+Change taa_select_mitigation() to sync up the two mitigation status
+and have them turned off if both "mds=off" and "tsx_async_abort=off"
+are present.
+
+Update documentation to emphasize the fact that both "mds=off" and
+"tsx_async_abort=off" have to be specified together for processors that
+are affected by both TAA and MDS to be effective.
+
+ [ bp: Massage and add kernel-parameters.txt change too. ]
+
+Fixes: 1b42f017415b ("x86/speculation/taa: Add mitigation for TSX Async Abort")
+Signed-off-by: Waiman Long <longman@redhat.com>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: "H. Peter Anvin" <hpa@zytor.com>
+Cc: Ingo Molnar <mingo@redhat.com>
+Cc: Jiri Kosina <jkosina@suse.cz>
+Cc: Jonathan Corbet <corbet@lwn.net>
+Cc: Josh Poimboeuf <jpoimboe@redhat.com>
+Cc: linux-doc@vger.kernel.org
+Cc: Mark Gross <mgross@linux.intel.com>
+Cc: <stable@vger.kernel.org>
+Cc: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Tim Chen <tim.c.chen@linux.intel.com>
+Cc: Tony Luck <tony.luck@intel.com>
+Cc: Tyler Hicks <tyhicks@canonical.com>
+Cc: x86-ml <x86@kernel.org>
+Link: https://lkml.kernel.org/r/20191115161445.30809-2-longman@redhat.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ Documentation/hw-vuln/mds.rst             |    7 +++++--
+ Documentation/hw-vuln/tsx_async_abort.rst |    5 ++++-
+ Documentation/kernel-parameters.txt       |   11 +++++++++++
+ arch/x86/kernel/cpu/bugs.c                |   17 +++++++++++++++--
+ 4 files changed, 35 insertions(+), 5 deletions(-)
+
+--- a/Documentation/hw-vuln/mds.rst
++++ b/Documentation/hw-vuln/mds.rst
+@@ -262,8 +262,11 @@ time with the option "mds=". The valid a
+   ============  =============================================================
+-Not specifying this option is equivalent to "mds=full".
+-
++Not specifying this option is equivalent to "mds=full". For processors
++that are affected by both TAA (TSX Asynchronous Abort) and MDS,
++specifying just "mds=off" without an accompanying "tsx_async_abort=off"
++will have no effect as the same mitigation is used for both
++vulnerabilities.
+ Mitigation selection guide
+ --------------------------
+--- a/Documentation/hw-vuln/tsx_async_abort.rst
++++ b/Documentation/hw-vuln/tsx_async_abort.rst
+@@ -169,7 +169,10 @@ the option "tsx_async_abort=". The valid
+                 systems will have no effect.
+   ============  =============================================================
+-Not specifying this option is equivalent to "tsx_async_abort=full".
++Not specifying this option is equivalent to "tsx_async_abort=full". For
++processors that are affected by both TAA and MDS, specifying just
++"tsx_async_abort=off" without an accompanying "mds=off" will have no
++effect as the same mitigation is used for both vulnerabilities.
+ The kernel command line also allows to control the TSX feature using the
+ parameter "tsx=" on CPUs which support TSX control. MSR_IA32_TSX_CTRL is used
+--- a/Documentation/kernel-parameters.txt
++++ b/Documentation/kernel-parameters.txt
+@@ -2054,6 +2054,12 @@ bytes respectively. Such letter suffixes
+                       full    - Enable MDS mitigation on vulnerable CPUs
+                       off     - Unconditionally disable MDS mitigation
++                      On TAA-affected machines, mds=off can be prevented by
++                      an active TAA mitigation as both vulnerabilities are
++                      mitigated with the same mechanism so in order to disable
++                      this mitigation, you need to specify tsx_async_abort=off
++                      too.
++
+                       Not specifying this option is equivalent to
+                       mds=full.
+@@ -4105,6 +4111,11 @@ bytes respectively. Such letter suffixes
+                       off        - Unconditionally disable TAA mitigation
++                      On MDS-affected machines, tsx_async_abort=off can be
++                      prevented by an active MDS mitigation as both vulnerabilities
++                      are mitigated with the same mechanism so in order to disable
++                      this mitigation, you need to specify mds=off too.
++
+                       Not specifying this option is equivalent to
+                       tsx_async_abort=full.  On CPUs which are MDS affected
+                       and deploy MDS mitigation, TAA mitigation is not
+--- a/arch/x86/kernel/cpu/bugs.c
++++ b/arch/x86/kernel/cpu/bugs.c
+@@ -283,8 +283,12 @@ static void __init taa_select_mitigation
+               return;
+       }
+-      /* TAA mitigation is turned off on the cmdline (tsx_async_abort=off) */
+-      if (taa_mitigation == TAA_MITIGATION_OFF)
++      /*
++       * TAA mitigation via VERW is turned off if both
++       * tsx_async_abort=off and mds=off are specified.
++       */
++      if (taa_mitigation == TAA_MITIGATION_OFF &&
++          mds_mitigation == MDS_MITIGATION_OFF)
+               goto out;
+       if (boot_cpu_has(X86_FEATURE_MD_CLEAR))
+@@ -315,6 +319,15 @@ static void __init taa_select_mitigation
+        */
+       static_branch_enable(&mds_user_clear);
++      /*
++       * Update MDS mitigation, if necessary, as the mds_user_clear is
++       * now enabled for TAA mitigation.
++       */
++      if (mds_mitigation == MDS_MITIGATION_OFF &&
++          boot_cpu_has_bug(X86_BUG_MDS)) {
++              mds_mitigation = MDS_MITIGATION_FULL;
++              mds_select_mitigation();
++      }
+ out:
+       pr_info("%s\n", taa_strings[taa_mitigation]);
+ }
diff --git a/queue-4.4/x86-speculation-fix-redundant-mds-mitigation-message.patch b/queue-4.4/x86-speculation-fix-redundant-mds-mitigation-message.patch
new file mode 100644 (file)
index 0000000..c1c5dfa
--- /dev/null
@@ -0,0 +1,81 @@
+From cd5a2aa89e847bdda7b62029d94e95488d73f6b2 Mon Sep 17 00:00:00 2001
+From: Waiman Long <longman@redhat.com>
+Date: Fri, 15 Nov 2019 11:14:45 -0500
+Subject: x86/speculation: Fix redundant MDS mitigation message
+
+From: Waiman Long <longman@redhat.com>
+
+commit cd5a2aa89e847bdda7b62029d94e95488d73f6b2 upstream.
+
+Since MDS and TAA mitigations are inter-related for processors that are
+affected by both vulnerabilities, the followiing confusing messages can
+be printed in the kernel log:
+
+  MDS: Vulnerable
+  MDS: Mitigation: Clear CPU buffers
+
+To avoid the first incorrect message, defer the printing of MDS
+mitigation after the TAA mitigation selection has been done. However,
+that has the side effect of printing TAA mitigation first before MDS
+mitigation.
+
+ [ bp: Check box is affected/mitigations are disabled first before
+   printing and massage. ]
+
+Suggested-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
+Signed-off-by: Waiman Long <longman@redhat.com>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: "H. Peter Anvin" <hpa@zytor.com>
+Cc: Ingo Molnar <mingo@redhat.com>
+Cc: Josh Poimboeuf <jpoimboe@redhat.com>
+Cc: Mark Gross <mgross@linux.intel.com>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Tim Chen <tim.c.chen@linux.intel.com>
+Cc: Tony Luck <tony.luck@intel.com>
+Cc: Tyler Hicks <tyhicks@canonical.com>
+Cc: x86-ml <x86@kernel.org>
+Link: https://lkml.kernel.org/r/20191115161445.30809-3-longman@redhat.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kernel/cpu/bugs.c |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+--- a/arch/x86/kernel/cpu/bugs.c
++++ b/arch/x86/kernel/cpu/bugs.c
+@@ -37,6 +37,7 @@ static void __init spectre_v2_select_mit
+ static void __init ssb_select_mitigation(void);
+ static void __init l1tf_select_mitigation(void);
+ static void __init mds_select_mitigation(void);
++static void __init mds_print_mitigation(void);
+ static void __init taa_select_mitigation(void);
+ /* The base value of the SPEC_CTRL MSR that always has to be preserved. */
+@@ -99,6 +100,12 @@ void __init check_bugs(void)
+       mds_select_mitigation();
+       taa_select_mitigation();
++      /*
++       * As MDS and TAA mitigations are inter-related, print MDS
++       * mitigation until after TAA mitigation selection is done.
++       */
++      mds_print_mitigation();
++
+       arch_smt_update();
+ #ifdef CONFIG_X86_32
+@@ -224,6 +231,12 @@ static void __init mds_select_mitigation
+               mds_mitigation = MDS_MITIGATION_OFF;
+               return;
+       }
++}
++
++static void __init mds_print_mitigation(void)
++{
++      if (!boot_cpu_has_bug(X86_BUG_MDS) || cpu_mitigations_off())
++              return;
+       if (mds_mitigation == MDS_MITIGATION_FULL) {
+               if (!boot_cpu_has(X86_FEATURE_MD_CLEAR))