Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [day] [month] [year] [list]
Date: Mon, 12 Mar 2018 03:06:12 +0000
From: Ben Hutchings <>
 "Kees Cook" <>,,
 "Al Viro" <>,
 "Linus Torvalds" <>,
 "Andi Kleen" <>,
 "Ingo Molnar" <>,
 "Dan Williams" <>,,
 "Thomas Gleixner" <>,
 "Tom Lendacky" <>,,
Subject: [PATCH 3.16 54/76] x86: Introduce barrier_nospec

3.16.56-rc1 review patch.  If anyone has any objections, please let me know.


From: Dan Williams <>

commit b3d7ad85b80bbc404635dca80f5b129f6242bc7a upstream.

Rename the open coded form of this instruction sequence from
rdtsc_ordered() into a generic barrier primitive, barrier_nospec().

One of the mitigations for Spectre variant1 vulnerabilities is to fence
speculative execution after successfully validating a bounds check. I.e.
force the result of a bounds check to resolve in the instruction pipeline
to ensure speculative execution honors that result before potentially
operating on out-of-bounds data.

No functional changes.

Suggested-by: Linus Torvalds <>
Suggested-by: Andi Kleen <>
Suggested-by: Ingo Molnar <>
Signed-off-by: Dan Williams <>
Signed-off-by: Thomas Gleixner <>
Cc: Tom Lendacky <>
Cc: Kees Cook <>
Cc: Al Viro <>
[bwh: Backported to 3.16: update rdtsc_barrier() instead of rdtsc_ordered()]
Signed-off-by: Ben Hutchings <>
--- a/arch/x86/include/asm/barrier.h
+++ b/arch/x86/include/asm/barrier.h
@@ -48,6 +48,10 @@ static inline unsigned long array_index_
 /* Override the default implementation from linux/nospec.h. */
 #define array_index_mask_nospec array_index_mask_nospec
+/* Prevent speculative execution past this barrier. */
+#define barrier_nospec() alternative_2("", "mfence", X86_FEATURE_MFENCE_RDTSC, \
+					   "lfence", X86_FEATURE_LFENCE_RDTSC)
  * read_barrier_depends - Flush all pending reads that subsequents reads
  * depend on.
@@ -174,8 +178,7 @@ do {									\
 static __always_inline void rdtsc_barrier(void)
-	alternative(ASM_NOP3, "mfence", X86_FEATURE_MFENCE_RDTSC);
-	alternative(ASM_NOP3, "lfence", X86_FEATURE_LFENCE_RDTSC);
+	barrier_nospec();
 #endif /* _ASM_X86_BARRIER_H */

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.