63 lines
1.9 KiB
Diff
63 lines
1.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Elena Reshetova <elena.reshetova@intel.com>
|
|
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 <arjan@linux.intel.com>
|
|
Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
|
|
Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
|
|
Signed-off-by: Andy Whitcroft <apw@canonical.com>
|
|
Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
|
|
(cherry picked from commit 6834bd7e6159da957a6c01deebf16132a694bc23)
|
|
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
|
---
|
|
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
|
|
|