From: Yu-cheng Yu <yu-cheng.yu@intel.com>
To: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
linux-mm@kvack.org, linux-arch@vger.kernel.org, x86@kernel.org,
"H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H.J. Lu" <hjl.tools@gmail.com>,
Vedvyas Shanbhogue <vedvyas.shanbhogue@intel.com>,
"Ravi V. Shankar" <ravi.v.shankar@intel.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Andy Lutomirski <luto@amacapital.net>,
Jonathan Corbet <corbet@lwn.net>, Oleg Nesterov <oleg@redhat.com>,
Arnd Bergmann <arnd@arndb.de>,
Mike Kravetz <mike.kravetz@oracle.com>
Cc: Yu-cheng Yu <yu-cheng.yu@intel.com>
Subject: [PATCH 04/10] x86/cet: Handle thread shadow stack
Date: Thu, 7 Jun 2018 07:38:01 -0700 [thread overview]
Message-ID: <20180607143807.3611-5-yu-cheng.yu@intel.com> (raw)
In-Reply-To: <20180607143807.3611-1-yu-cheng.yu@intel.com>
When fork() specifies CLONE_VM but not CLONE_VFORK, the child
needs a separate program stack and a separate shadow stack.
This patch handles allocation and freeing of the thread shadow
stack.
Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
---
arch/x86/include/asm/cet.h | 2 ++
arch/x86/include/asm/mmu_context.h | 3 +++
arch/x86/kernel/cet.c | 34 ++++++++++++++++++++++++++++++++++
arch/x86/kernel/process.c | 1 +
arch/x86/kernel/process_64.c | 7 +++++++
5 files changed, 47 insertions(+)
diff --git a/arch/x86/include/asm/cet.h b/arch/x86/include/asm/cet.h
index 5507469cb803..c8fd87e13859 100644
--- a/arch/x86/include/asm/cet.h
+++ b/arch/x86/include/asm/cet.h
@@ -19,6 +19,7 @@ struct cet_stat {
unsigned long cet_get_shstk_ptr(void);
int cet_push_shstk(int ia32, unsigned long ssp, unsigned long val);
int cet_setup_shstk(void);
+int cet_setup_thread_shstk(struct task_struct *p);
void cet_disable_shstk(void);
void cet_disable_free_shstk(struct task_struct *p);
int cet_restore_signal(unsigned long ssp);
@@ -28,6 +29,7 @@ static inline unsigned long cet_get_shstk_ptr(void) { return 0; }
static inline int cet_push_shstk(int ia32, unsigned long ssp,
unsigned long val) { return 0; }
static inline int cet_setup_shstk(void) { return 0; }
+static inline int cet_setup_thread_shstk(struct task_struct *p) { return 0; }
static inline void cet_disable_shstk(void) {}
static inline void cet_disable_free_shstk(struct task_struct *p) {}
static inline int cet_restore_signal(unsigned long ssp) { return 0; }
diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
index cf9911b5a53c..42395257efc3 100644
--- a/arch/x86/include/asm/mmu_context.h
+++ b/arch/x86/include/asm/mmu_context.h
@@ -13,6 +13,7 @@
#include <asm/tlbflush.h>
#include <asm/paravirt.h>
#include <asm/mpx.h>
+#include <asm/cet.h>
extern atomic64_t last_mm_ctx_id;
@@ -228,6 +229,8 @@ do { \
#else
#define deactivate_mm(tsk, mm) \
do { \
+ if (!tsk->vfork_done) \
+ cet_disable_free_shstk(tsk); \
load_gs_index(0); \
loadsegment(fs, 0); \
} while (0)
diff --git a/arch/x86/kernel/cet.c b/arch/x86/kernel/cet.c
index 6f445ce94c83..156f5d88ffd5 100644
--- a/arch/x86/kernel/cet.c
+++ b/arch/x86/kernel/cet.c
@@ -103,6 +103,40 @@ int cet_setup_shstk(void)
return 0;
}
+int cet_setup_thread_shstk(struct task_struct *tsk)
+{
+ unsigned long addr, size;
+ struct cet_user_state *state;
+
+ if (!current->thread.cet.shstk_enabled)
+ return 0;
+
+ state = get_xsave_addr(&tsk->thread.fpu.state.xsave,
+ XFEATURE_MASK_SHSTK_USER);
+
+ if (!state)
+ return -EINVAL;
+
+ size = tsk->thread.cet.shstk_size;
+ if (size == 0)
+ size = SHSTK_SIZE;
+
+ addr = shstk_mmap(0, size);
+
+ if (addr >= TASK_SIZE) {
+ tsk->thread.cet.shstk_base = 0;
+ tsk->thread.cet.shstk_size = 0;
+ tsk->thread.cet.shstk_enabled = 0;
+ return -ENOMEM;
+ }
+
+ state->user_ssp = (u64)(addr + size - sizeof(u64));
+ tsk->thread.cet.shstk_base = addr;
+ tsk->thread.cet.shstk_size = size;
+ tsk->thread.cet.shstk_enabled = 1;
+ return 0;
+}
+
void cet_disable_shstk(void)
{
u64 r;
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index b3b0b482983a..ae56caee41f9 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -127,6 +127,7 @@ void exit_thread(struct task_struct *tsk)
free_vm86(t);
+ cet_disable_free_shstk(tsk);
fpu__drop(fpu);
}
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 12bb445fb98d..6e493b0bcedd 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -317,6 +317,13 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp,
if (sp)
childregs->sp = sp;
+ /* Allocate a new shadow stack for pthread */
+ if ((clone_flags & (CLONE_VFORK | CLONE_VM)) == CLONE_VM) {
+ err = cet_setup_thread_shstk(p);
+ if (err)
+ goto out;
+ }
+
err = -ENOMEM;
if (unlikely(test_tsk_thread_flag(me, TIF_IO_BITMAP))) {
p->thread.io_bitmap_ptr = kmemdup(me->thread.io_bitmap_ptr,
--
2.15.1
WARNING: multiple messages have this Message-ID (diff)
From: Yu-cheng Yu <yu-cheng.yu@intel.com>
To: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
linux-mm@kvack.org, linux-arch@vger.kernel.org, x86@kernel.org,
"H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H.J. Lu" <hjl.tools@gmail.com>,
Vedvyas Shanbhogue <vedvyas.shanbhogue@intel.com>,
"Ravi V. Shankar" <ravi.v.shankar@intel.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Andy Lutomirski <luto@amacapital.net>,
Jonathan Corbet <corbet@lwn.net>, Oleg Nesterov <oleg@redhat.com>,
Arnd Bergmann <arnd@arndb.de>,
Mike Kravetz <mike.kravetz@oracle.com>
Cc: Yu-cheng Yu <yu-cheng.yu@intel.com>
Subject: [PATCH 04/10] x86/cet: Handle thread shadow stack
Date: Thu, 7 Jun 2018 07:38:01 -0700 [thread overview]
Message-ID: <20180607143807.3611-5-yu-cheng.yu@intel.com> (raw)
In-Reply-To: <20180607143807.3611-1-yu-cheng.yu@intel.com>
When fork() specifies CLONE_VM but not CLONE_VFORK, the child
needs a separate program stack and a separate shadow stack.
This patch handles allocation and freeing of the thread shadow
stack.
Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
---
arch/x86/include/asm/cet.h | 2 ++
arch/x86/include/asm/mmu_context.h | 3 +++
arch/x86/kernel/cet.c | 34 ++++++++++++++++++++++++++++++++++
arch/x86/kernel/process.c | 1 +
arch/x86/kernel/process_64.c | 7 +++++++
5 files changed, 47 insertions(+)
diff --git a/arch/x86/include/asm/cet.h b/arch/x86/include/asm/cet.h
index 5507469cb803..c8fd87e13859 100644
--- a/arch/x86/include/asm/cet.h
+++ b/arch/x86/include/asm/cet.h
@@ -19,6 +19,7 @@ struct cet_stat {
unsigned long cet_get_shstk_ptr(void);
int cet_push_shstk(int ia32, unsigned long ssp, unsigned long val);
int cet_setup_shstk(void);
+int cet_setup_thread_shstk(struct task_struct *p);
void cet_disable_shstk(void);
void cet_disable_free_shstk(struct task_struct *p);
int cet_restore_signal(unsigned long ssp);
@@ -28,6 +29,7 @@ static inline unsigned long cet_get_shstk_ptr(void) { return 0; }
static inline int cet_push_shstk(int ia32, unsigned long ssp,
unsigned long val) { return 0; }
static inline int cet_setup_shstk(void) { return 0; }
+static inline int cet_setup_thread_shstk(struct task_struct *p) { return 0; }
static inline void cet_disable_shstk(void) {}
static inline void cet_disable_free_shstk(struct task_struct *p) {}
static inline int cet_restore_signal(unsigned long ssp) { return 0; }
diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
index cf9911b5a53c..42395257efc3 100644
--- a/arch/x86/include/asm/mmu_context.h
+++ b/arch/x86/include/asm/mmu_context.h
@@ -13,6 +13,7 @@
#include <asm/tlbflush.h>
#include <asm/paravirt.h>
#include <asm/mpx.h>
+#include <asm/cet.h>
extern atomic64_t last_mm_ctx_id;
@@ -228,6 +229,8 @@ do { \
#else
#define deactivate_mm(tsk, mm) \
do { \
+ if (!tsk->vfork_done) \
+ cet_disable_free_shstk(tsk); \
load_gs_index(0); \
loadsegment(fs, 0); \
} while (0)
diff --git a/arch/x86/kernel/cet.c b/arch/x86/kernel/cet.c
index 6f445ce94c83..156f5d88ffd5 100644
--- a/arch/x86/kernel/cet.c
+++ b/arch/x86/kernel/cet.c
@@ -103,6 +103,40 @@ int cet_setup_shstk(void)
return 0;
}
+int cet_setup_thread_shstk(struct task_struct *tsk)
+{
+ unsigned long addr, size;
+ struct cet_user_state *state;
+
+ if (!current->thread.cet.shstk_enabled)
+ return 0;
+
+ state = get_xsave_addr(&tsk->thread.fpu.state.xsave,
+ XFEATURE_MASK_SHSTK_USER);
+
+ if (!state)
+ return -EINVAL;
+
+ size = tsk->thread.cet.shstk_size;
+ if (size == 0)
+ size = SHSTK_SIZE;
+
+ addr = shstk_mmap(0, size);
+
+ if (addr >= TASK_SIZE) {
+ tsk->thread.cet.shstk_base = 0;
+ tsk->thread.cet.shstk_size = 0;
+ tsk->thread.cet.shstk_enabled = 0;
+ return -ENOMEM;
+ }
+
+ state->user_ssp = (u64)(addr + size - sizeof(u64));
+ tsk->thread.cet.shstk_base = addr;
+ tsk->thread.cet.shstk_size = size;
+ tsk->thread.cet.shstk_enabled = 1;
+ return 0;
+}
+
void cet_disable_shstk(void)
{
u64 r;
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index b3b0b482983a..ae56caee41f9 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -127,6 +127,7 @@ void exit_thread(struct task_struct *tsk)
free_vm86(t);
+ cet_disable_free_shstk(tsk);
fpu__drop(fpu);
}
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 12bb445fb98d..6e493b0bcedd 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -317,6 +317,13 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long sp,
if (sp)
childregs->sp = sp;
+ /* Allocate a new shadow stack for pthread */
+ if ((clone_flags & (CLONE_VFORK | CLONE_VM)) == CLONE_VM) {
+ err = cet_setup_thread_shstk(p);
+ if (err)
+ goto out;
+ }
+
err = -ENOMEM;
if (unlikely(test_tsk_thread_flag(me, TIF_IO_BITMAP))) {
p->thread.io_bitmap_ptr = kmemdup(me->thread.io_bitmap_ptr,
--
2.15.1
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2018-06-07 14:38 UTC|newest]
Thread overview: 205+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-07 14:37 [PATCH 00/10] Control Flow Enforcement - Part (3) Yu-cheng Yu
2018-06-07 14:37 ` Yu-cheng Yu
2018-06-07 14:37 ` [PATCH 01/10] x86/cet: User-mode shadow stack support Yu-cheng Yu
2018-06-07 14:37 ` Yu-cheng Yu
2018-06-07 16:37 ` Andy Lutomirski
2018-06-07 16:37 ` Andy Lutomirski
2018-06-07 17:46 ` Yu-cheng Yu
2018-06-07 17:46 ` Yu-cheng Yu
2018-06-07 17:55 ` Dave Hansen
2018-06-07 17:55 ` Dave Hansen
2018-06-07 18:23 ` Andy Lutomirski
2018-06-07 18:23 ` Andy Lutomirski
2018-06-12 11:56 ` Balbir Singh
2018-06-12 11:56 ` Balbir Singh
2018-06-12 15:03 ` Yu-cheng Yu
2018-06-12 15:03 ` Yu-cheng Yu
2018-06-07 14:37 ` [PATCH 02/10] x86/cet: Introduce WRUSS instruction Yu-cheng Yu
2018-06-07 14:37 ` Yu-cheng Yu
2018-06-07 16:40 ` Andy Lutomirski
2018-06-07 16:40 ` Andy Lutomirski
2018-06-07 16:51 ` Yu-cheng Yu
2018-06-07 16:51 ` Yu-cheng Yu
2018-06-07 18:41 ` Peter Zijlstra
2018-06-07 18:41 ` Peter Zijlstra
2018-06-07 20:31 ` Yu-cheng Yu
2018-06-07 20:31 ` Yu-cheng Yu
2018-06-11 8:17 ` Peter Zijlstra
2018-06-11 8:17 ` Peter Zijlstra
2018-06-11 15:02 ` Yu-cheng Yu
2018-06-11 15:02 ` Yu-cheng Yu
2018-06-14 1:30 ` Balbir Singh
2018-06-14 1:30 ` Balbir Singh
2018-06-14 14:43 ` Yu-cheng Yu
2018-06-14 14:43 ` Yu-cheng Yu
2018-06-07 14:38 ` [PATCH 03/10] x86/cet: Signal handling for shadow stack Yu-cheng Yu
2018-06-07 14:38 ` Yu-cheng Yu
2018-06-07 18:30 ` Andy Lutomirski
2018-06-07 18:30 ` Andy Lutomirski
2018-06-07 18:58 ` Florian Weimer
2018-06-07 18:58 ` Florian Weimer
2018-06-07 19:51 ` Yu-cheng Yu
2018-06-07 19:51 ` Yu-cheng Yu
2018-06-07 20:07 ` Cyrill Gorcunov
2018-06-07 20:07 ` Cyrill Gorcunov
2018-06-07 20:57 ` Andy Lutomirski
2018-06-07 20:57 ` Andy Lutomirski
2018-06-08 12:07 ` Cyrill Gorcunov
2018-06-08 12:07 ` Cyrill Gorcunov
2018-06-07 20:12 ` Yu-cheng Yu
2018-06-07 20:12 ` Yu-cheng Yu
2018-06-07 20:17 ` Dave Hansen
2018-06-07 20:17 ` Dave Hansen
2018-06-07 14:38 ` Yu-cheng Yu [this message]
2018-06-07 14:38 ` [PATCH 04/10] x86/cet: Handle thread " Yu-cheng Yu
2018-06-07 18:21 ` Andy Lutomirski
2018-06-07 18:21 ` Andy Lutomirski
2018-06-07 19:47 ` Florian Weimer
2018-06-07 19:47 ` Florian Weimer
2018-06-07 19:47 ` Florian Weimer
2018-06-07 20:53 ` Andy Lutomirski
2018-06-07 20:53 ` Andy Lutomirski
2018-06-08 14:53 ` Florian Weimer
2018-06-08 14:53 ` Florian Weimer
2018-06-08 14:53 ` Florian Weimer
2018-06-08 15:01 ` Andy Lutomirski
2018-06-08 15:01 ` Andy Lutomirski
2018-06-08 15:50 ` Yu-cheng Yu
2018-06-08 15:50 ` Yu-cheng Yu
2018-06-08 15:50 ` Yu-cheng Yu
2018-06-07 14:38 ` [PATCH 05/10] x86/cet: ELF header parsing of Control Flow Enforcement Yu-cheng Yu
2018-06-07 14:38 ` Yu-cheng Yu
2018-06-07 18:38 ` Andy Lutomirski
2018-06-07 18:38 ` Andy Lutomirski
2018-06-07 20:40 ` Yu-cheng Yu
2018-06-07 20:40 ` Yu-cheng Yu
2018-06-07 14:38 ` [PATCH 06/10] x86/cet: Add arch_prctl functions for shadow stack Yu-cheng Yu
2018-06-07 14:38 ` Yu-cheng Yu
2018-06-07 18:48 ` Andy Lutomirski
2018-06-07 18:48 ` Andy Lutomirski
2018-06-07 20:30 ` Yu-cheng Yu
2018-06-07 20:30 ` Yu-cheng Yu
2018-06-07 21:01 ` Andy Lutomirski
2018-06-07 21:01 ` Andy Lutomirski
2018-06-07 22:02 ` H.J. Lu
2018-06-07 22:02 ` H.J. Lu
2018-06-07 23:01 ` Andy Lutomirski
2018-06-07 23:01 ` Andy Lutomirski
2018-06-08 4:09 ` H.J. Lu
2018-06-08 4:09 ` H.J. Lu
2018-06-08 4:38 ` Andy Lutomirski
2018-06-08 4:38 ` Andy Lutomirski
2018-06-08 12:24 ` H.J. Lu
2018-06-08 12:24 ` H.J. Lu
2018-06-08 14:57 ` Andy Lutomirski
2018-06-08 14:57 ` Andy Lutomirski
2018-06-08 15:52 ` Cyrill Gorcunov
2018-06-08 15:52 ` Cyrill Gorcunov
2018-06-08 4:22 ` H.J. Lu
2018-06-08 4:22 ` H.J. Lu
2018-06-08 4:35 ` Andy Lutomirski
2018-06-08 4:35 ` Andy Lutomirski
2018-06-08 12:17 ` H.J. Lu
2018-06-08 12:17 ` H.J. Lu
2018-06-12 10:03 ` Thomas Gleixner
2018-06-12 10:03 ` Thomas Gleixner
2018-06-12 11:43 ` H.J. Lu
2018-06-12 11:43 ` H.J. Lu
2018-06-12 16:01 ` Andy Lutomirski
2018-06-12 16:01 ` Andy Lutomirski
2018-06-12 16:05 ` H.J. Lu
2018-06-12 16:05 ` H.J. Lu
2018-06-12 16:34 ` Andy Lutomirski
2018-06-12 16:34 ` Andy Lutomirski
2018-06-12 16:51 ` H.J. Lu
2018-06-12 16:51 ` H.J. Lu
2018-06-12 18:59 ` Thomas Gleixner
2018-06-12 18:59 ` Thomas Gleixner
2018-06-12 19:34 ` H.J. Lu
2018-06-12 19:34 ` H.J. Lu
2018-06-18 22:03 ` Andy Lutomirski
2018-06-18 22:03 ` Andy Lutomirski
2018-06-19 0:52 ` Kees Cook
2018-06-19 0:52 ` Kees Cook
2018-06-19 6:40 ` Florian Weimer
2018-06-19 6:40 ` Florian Weimer
2018-06-19 14:50 ` Andy Lutomirski
2018-06-19 14:50 ` Andy Lutomirski
2018-06-19 16:44 ` Kees Cook
2018-06-19 16:44 ` Kees Cook
2018-06-19 16:59 ` Yu-cheng Yu
2018-06-19 16:59 ` Yu-cheng Yu
2018-06-19 16:59 ` Yu-cheng Yu
2018-06-19 17:07 ` Kees Cook
2018-06-19 17:07 ` Kees Cook
2018-06-19 17:20 ` Andy Lutomirski
2018-06-19 17:20 ` Andy Lutomirski
2018-06-19 20:12 ` Kees Cook
2018-06-19 20:12 ` Kees Cook
2018-06-19 20:47 ` Andy Lutomirski
2018-06-19 20:47 ` Andy Lutomirski
2018-06-19 22:38 ` Yu-cheng Yu
2018-06-19 22:38 ` Yu-cheng Yu
2018-06-19 22:38 ` Yu-cheng Yu
2018-06-20 0:50 ` Andy Lutomirski
2018-06-20 0:50 ` Andy Lutomirski
2018-06-21 23:07 ` Yu-cheng Yu
2018-06-21 23:07 ` Yu-cheng Yu
2018-06-21 23:07 ` Yu-cheng Yu
2018-06-07 14:38 ` [PATCH 07/10] mm: Prevent mprotect from changing " Yu-cheng Yu
2018-06-07 14:38 ` Yu-cheng Yu
2018-06-07 14:38 ` [PATCH 08/10] mm: Prevent mremap of " Yu-cheng Yu
2018-06-07 14:38 ` Yu-cheng Yu
2018-06-07 18:48 ` Andy Lutomirski
2018-06-07 18:48 ` Andy Lutomirski
2018-06-07 20:18 ` Yu-cheng Yu
2018-06-07 20:18 ` Yu-cheng Yu
2018-06-07 14:38 ` [PATCH 09/10] mm: Prevent madvise from changing " Yu-cheng Yu
2018-06-07 14:38 ` Yu-cheng Yu
2018-06-07 20:54 ` Andy Lutomirski
2018-06-07 20:54 ` Andy Lutomirski
2018-06-07 21:09 ` Nadav Amit
2018-06-07 21:09 ` Nadav Amit
2018-06-07 21:18 ` Yu-cheng Yu
2018-06-07 21:18 ` Yu-cheng Yu
2018-06-07 21:18 ` Yu-cheng Yu
2018-06-07 14:38 ` [PATCH 10/10] mm: Prevent munmap and remap_file_pages of " Yu-cheng Yu
2018-06-07 14:38 ` Yu-cheng Yu
2018-06-07 18:50 ` Andy Lutomirski
2018-06-07 18:50 ` Andy Lutomirski
2018-06-07 20:15 ` Yu-cheng Yu
2018-06-07 20:15 ` Yu-cheng Yu
2018-06-12 10:56 ` [PATCH 00/10] Control Flow Enforcement - Part (3) Balbir Singh
2018-06-12 10:56 ` Balbir Singh
2018-06-12 15:03 ` Yu-cheng Yu
2018-06-12 15:03 ` Yu-cheng Yu
2018-06-12 16:00 ` Andy Lutomirski
2018-06-12 16:00 ` Andy Lutomirski
2018-06-12 16:21 ` Yu-cheng Yu
2018-06-12 16:21 ` Yu-cheng Yu
2018-06-12 16:31 ` Andy Lutomirski
2018-06-12 16:31 ` Andy Lutomirski
2018-06-12 17:24 ` Yu-cheng Yu
2018-06-12 17:24 ` Yu-cheng Yu
2018-06-12 20:15 ` Yu-cheng Yu
2018-06-12 20:15 ` Yu-cheng Yu
2018-06-14 1:07 ` Balbir Singh
2018-06-14 1:07 ` Balbir Singh
2018-06-14 14:56 ` Yu-cheng Yu
2018-06-14 14:56 ` Yu-cheng Yu
2018-06-17 3:16 ` Balbir Singh
2018-06-17 3:16 ` Balbir Singh
2018-06-18 21:44 ` Andy Lutomirski
2018-06-18 21:44 ` Andy Lutomirski
2018-06-19 8:52 ` Balbir Singh
2018-06-19 8:52 ` Balbir Singh
2018-06-26 2:46 ` Jann Horn
2018-06-26 2:46 ` Jann Horn
2018-06-26 14:56 ` Yu-cheng Yu
2018-06-26 14:56 ` Yu-cheng Yu
2018-06-26 14:56 ` Yu-cheng Yu
2018-06-26 5:26 ` Andy Lutomirski
2018-06-26 5:26 ` Andy Lutomirski
2018-06-26 14:56 ` Yu-cheng Yu
2018-06-26 14:56 ` Yu-cheng Yu
2018-06-26 14:56 ` Yu-cheng Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180607143807.3611-5-yu-cheng.yu@intel.com \
--to=yu-cheng.yu@intel.com \
--cc=arnd@arndb.de \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=hjl.tools@gmail.com \
--cc=hpa@zytor.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=luto@amacapital.net \
--cc=mike.kravetz@oracle.com \
--cc=mingo@redhat.com \
--cc=oleg@redhat.com \
--cc=ravi.v.shankar@intel.com \
--cc=tglx@linutronix.de \
--cc=vedvyas.shanbhogue@intel.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.