From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Elena Reshetova Date: Mon, 4 Sep 2017 13:11:43 +0300 Subject: [PATCH] locking/barriers: introduce new memory barrier gmb() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CVE-2017-5753 CVE-2017-5715 In constrast to existing mb() and rmb() barriers, gmb() barrier is arch-independent and can be used to implement any type of memory barrier. In x86 case, it is either lfence or mfence, based on processor type. ARM and others can define it according to their needs. Suggested-by: Arjan van de Ven Signed-off-by: Elena Reshetova Signed-off-by: Tim Chen Signed-off-by: Andy Whitcroft Signed-off-by: Kleber Sacilotto de Souza (cherry picked from commit 6834bd7e6159da957a6c01deebf16132a694bc23) Signed-off-by: Fabian Grünbichler --- arch/x86/include/asm/barrier.h | 3 +++ include/asm-generic/barrier.h | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h index bfb28caf97b1..aae78054cae2 100644 --- a/arch/x86/include/asm/barrier.h +++ b/arch/x86/include/asm/barrier.h @@ -23,6 +23,9 @@ #define wmb() asm volatile("sfence" ::: "memory") #endif +#define gmb() alternative_2("", "mfence", X86_FEATURE_MFENCE_RDTSC, \ + "lfence", X86_FEATURE_LFENCE_RDTSC); + #ifdef CONFIG_X86_PPRO_FENCE #define dma_rmb() rmb() #else diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h index fe297b599b0a..0ee1345c9222 100644 --- a/include/asm-generic/barrier.h +++ b/include/asm-generic/barrier.h @@ -42,6 +42,10 @@ #define wmb() mb() #endif +#ifndef gmb +#define gmb() do { } while (0) +#endif + #ifndef dma_rmb #define dma_rmb() rmb() #endif -- 2.14.2