]> git.proxmox.com Git - pve-kernel.git/blame - patches/kernel/0260-locking-barriers-introduce-new-memory-barrier-gmb.patch
fix #1622: i40e memory leak
[pve-kernel.git] / patches / kernel / 0260-locking-barriers-introduce-new-memory-barrier-gmb.patch
CommitLineData
035dbe67
FG
1From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2From: Elena Reshetova <elena.reshetova@intel.com>
3Date: Mon, 4 Sep 2017 13:11:43 +0300
4Subject: [PATCH] locking/barriers: introduce new memory barrier gmb()
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9CVE-2017-5753
10CVE-2017-5715
11
12In constrast to existing mb() and rmb() barriers,
13gmb() barrier is arch-independent and can be used to
14implement any type of memory barrier.
15In x86 case, it is either lfence or mfence, based on
16processor type. ARM and others can define it according
17to their needs.
18
19Suggested-by: Arjan van de Ven <arjan@linux.intel.com>
20Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
21Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
22Signed-off-by: Andy Whitcroft <apw@canonical.com>
23Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
24(cherry picked from commit 6834bd7e6159da957a6c01deebf16132a694bc23)
25Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
26---
27 arch/x86/include/asm/barrier.h | 3 +++
28 include/asm-generic/barrier.h | 4 ++++
29 2 files changed, 7 insertions(+)
30
31diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
32index bfb28caf97b1..aae78054cae2 100644
33--- a/arch/x86/include/asm/barrier.h
34+++ b/arch/x86/include/asm/barrier.h
35@@ -23,6 +23,9 @@
36 #define wmb() asm volatile("sfence" ::: "memory")
37 #endif
38
39+#define gmb() alternative_2("", "mfence", X86_FEATURE_MFENCE_RDTSC, \
40+ "lfence", X86_FEATURE_LFENCE_RDTSC);
41+
42 #ifdef CONFIG_X86_PPRO_FENCE
43 #define dma_rmb() rmb()
44 #else
45diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h
46index fe297b599b0a..0ee1345c9222 100644
47--- a/include/asm-generic/barrier.h
48+++ b/include/asm-generic/barrier.h
49@@ -42,6 +42,10 @@
50 #define wmb() mb()
51 #endif
52
53+#ifndef gmb
54+#define gmb() do { } while (0)
55+#endif
56+
57 #ifndef dma_rmb
58 #define dma_rmb() rmb()
59 #endif
60--
612.14.2
62