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 03/10] x86/cet: Signal handling for shadow stack
Date: Thu, 7 Jun 2018 07:38:00 -0700 [thread overview]
Message-ID: <20180607143807.3611-4-yu-cheng.yu@intel.com> (raw)
In-Reply-To: <20180607143807.3611-1-yu-cheng.yu@intel.com>
Set and restore shadow stack pointer for signals.
Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
---
arch/x86/ia32/ia32_signal.c | 5 ++++
arch/x86/include/asm/cet.h | 7 +++++
arch/x86/include/uapi/asm/sigcontext.h | 4 +++
arch/x86/kernel/cet.c | 51 ++++++++++++++++++++++++++++++++++
arch/x86/kernel/signal.c | 11 ++++++++
5 files changed, 78 insertions(+)
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c
index 86b1341cba9a..26a776baff7c 100644
--- a/arch/x86/ia32/ia32_signal.c
+++ b/arch/x86/ia32/ia32_signal.c
@@ -34,6 +34,7 @@
#include <asm/sigframe.h>
#include <asm/sighandling.h>
#include <asm/smap.h>
+#include <asm/cet.h>
/*
* Do a signal return; undo the signal stack.
@@ -74,6 +75,7 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
unsigned int tmpflags, err = 0;
void __user *buf;
u32 tmp;
+ u32 ssp;
/* Always make any pending restarted system calls return -EINTR */
current->restart_block.fn = do_no_restart_syscall;
@@ -104,9 +106,11 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
get_user_ex(tmp, &sc->fpstate);
buf = compat_ptr(tmp);
+ get_user_ex(ssp, &sc->ssp);
} get_user_catch(err);
err |= fpu__restore_sig(buf, 1);
+ err |= cet_restore_signal((unsigned long)ssp);
force_iret();
@@ -194,6 +198,7 @@ static int ia32_setup_sigcontext(struct sigcontext_32 __user *sc,
put_user_ex(current->thread.trap_nr, &sc->trapno);
put_user_ex(current->thread.error_code, &sc->err);
put_user_ex(regs->ip, &sc->ip);
+ put_user_ex((u32)cet_get_shstk_ptr(), &sc->ssp);
put_user_ex(regs->cs, (unsigned int __user *)&sc->cs);
put_user_ex(regs->flags, &sc->flags);
put_user_ex(regs->sp, &sc->sp_at_signal);
diff --git a/arch/x86/include/asm/cet.h b/arch/x86/include/asm/cet.h
index 9d5bc1efc9b7..5507469cb803 100644
--- a/arch/x86/include/asm/cet.h
+++ b/arch/x86/include/asm/cet.h
@@ -17,14 +17,21 @@ struct cet_stat {
#ifdef CONFIG_X86_INTEL_CET
unsigned long cet_get_shstk_ptr(void);
+int cet_push_shstk(int ia32, unsigned long ssp, unsigned long val);
int cet_setup_shstk(void);
void cet_disable_shstk(void);
void cet_disable_free_shstk(struct task_struct *p);
+int cet_restore_signal(unsigned long ssp);
+int cet_setup_signal(int ia32, unsigned long addr);
#else
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 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; }
+static inline int cet_setup_signal(int ia32, unsigned long addr) { return 0; }
#endif
#endif /* __ASSEMBLY__ */
diff --git a/arch/x86/include/uapi/asm/sigcontext.h b/arch/x86/include/uapi/asm/sigcontext.h
index 844d60eb1882..6c8997a0156a 100644
--- a/arch/x86/include/uapi/asm/sigcontext.h
+++ b/arch/x86/include/uapi/asm/sigcontext.h
@@ -230,6 +230,7 @@ struct sigcontext_32 {
__u32 fpstate; /* Zero when no FPU/extended context */
__u32 oldmask;
__u32 cr2;
+ __u32 ssp;
};
/*
@@ -262,6 +263,7 @@ struct sigcontext_64 {
__u64 trapno;
__u64 oldmask;
__u64 cr2;
+ __u64 ssp;
/*
* fpstate is really (struct _fpstate *) or (struct _xstate *)
@@ -320,6 +322,7 @@ struct sigcontext {
struct _fpstate __user *fpstate;
__u32 oldmask;
__u32 cr2;
+ __u32 ssp;
};
# else /* __x86_64__: */
struct sigcontext {
@@ -377,6 +380,7 @@ struct sigcontext {
__u64 trapno;
__u64 oldmask;
__u64 cr2;
+ __u64 ssp;
struct _fpstate __user *fpstate; /* Zero when no FPU context */
# ifdef __ILP32__
__u32 __fpstate_pad;
diff --git a/arch/x86/kernel/cet.c b/arch/x86/kernel/cet.c
index 8abbfd44322a..6f445ce94c83 100644
--- a/arch/x86/kernel/cet.c
+++ b/arch/x86/kernel/cet.c
@@ -17,6 +17,7 @@
#include <asm/fpu/xstate.h>
#include <asm/fpu/types.h>
#include <asm/cet.h>
+#include <asm/special_insns.h>
#define SHSTK_SIZE (0x8000 * (test_thread_flag(TIF_IA32) ? 4 : 8))
@@ -47,6 +48,24 @@ unsigned long cet_get_shstk_ptr(void)
return ptr;
}
+int cet_push_shstk(int ia32, unsigned long ssp, unsigned long val)
+{
+ if (val >= TASK_SIZE)
+ return -EINVAL;
+
+ if (IS_ENABLED(CONFIG_IA32_EMULATION) && ia32) {
+ if (!IS_ALIGNED(ssp, 4))
+ return -EINVAL;
+ cet_set_shstk_ptr(ssp);
+ return write_user_shstk_32(ssp, (unsigned int)val);
+ } else {
+ if (!IS_ALIGNED(ssp, 8))
+ return -EINVAL;
+ cet_set_shstk_ptr(ssp);
+ return write_user_shstk_64(ssp, val);
+ }
+}
+
static unsigned long shstk_mmap(unsigned long addr, unsigned long len)
{
struct mm_struct *mm = current->mm;
@@ -121,3 +140,35 @@ void cet_disable_free_shstk(struct task_struct *tsk)
tsk->thread.cet.shstk_enabled = 0;
}
+
+int cet_restore_signal(unsigned long ssp)
+{
+ if (!current->thread.cet.shstk_enabled)
+ return 0;
+ return cet_set_shstk_ptr(ssp);
+}
+
+int cet_setup_signal(int ia32, unsigned long rstor_addr)
+{
+ unsigned long ssp;
+ struct cet_stat *cet = ¤t->thread.cet;
+
+ if (!current->thread.cet.shstk_enabled)
+ return 0;
+
+ ssp = cet_get_shstk_ptr();
+
+ /*
+ * Put the restorer address on the shstk
+ */
+ if (ia32)
+ ssp -= sizeof(u32);
+ else
+ ssp -= sizeof(rstor_addr);
+
+ if (ssp >= (cet->shstk_base + cet->shstk_size) ||
+ ssp < cet->shstk_base)
+ return -EINVAL;
+
+ return cet_push_shstk(ia32, ssp, rstor_addr);
+}
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index da270b95fe4d..86fb897cae19 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -46,6 +46,7 @@
#include <asm/sigframe.h>
#include <asm/signal.h>
+#include <asm/cet.h>
#define COPY(x) do { \
get_user_ex(regs->x, &sc->x); \
@@ -102,6 +103,7 @@ static int restore_sigcontext(struct pt_regs *regs,
void __user *buf;
unsigned int tmpflags;
unsigned int err = 0;
+ unsigned long ssp = 0;
/* Always make any pending restarted system calls return -EINTR */
current->restart_block.fn = do_no_restart_syscall;
@@ -148,9 +150,11 @@ static int restore_sigcontext(struct pt_regs *regs,
get_user_ex(buf_val, &sc->fpstate);
buf = (void __user *)buf_val;
+ get_user_ex(ssp, &sc->ssp);
} get_user_catch(err);
err |= fpu__restore_sig(buf, IS_ENABLED(CONFIG_X86_32));
+ err |= cet_restore_signal(ssp);
force_iret();
@@ -193,6 +197,7 @@ int setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
put_user_ex(current->thread.trap_nr, &sc->trapno);
put_user_ex(current->thread.error_code, &sc->err);
put_user_ex(regs->ip, &sc->ip);
+ put_user_ex(cet_get_shstk_ptr(), &sc->ssp);
#ifdef CONFIG_X86_32
put_user_ex(regs->cs, (unsigned int __user *)&sc->cs);
put_user_ex(regs->flags, &sc->flags);
@@ -742,6 +747,12 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)
user_disable_single_step(current);
failed = (setup_rt_frame(ksig, regs) < 0);
+ if (!failed) {
+ unsigned long rstor = (unsigned long)ksig->ka.sa.sa_restorer;
+ int ia32 = is_ia32_frame(ksig);
+
+ failed = cet_setup_signal(ia32, rstor);
+ }
if (!failed) {
/*
* Clear the direction flag as per the ABI for function entry.
--
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 03/10] x86/cet: Signal handling for shadow stack
Date: Thu, 7 Jun 2018 07:38:00 -0700 [thread overview]
Message-ID: <20180607143807.3611-4-yu-cheng.yu@intel.com> (raw)
In-Reply-To: <20180607143807.3611-1-yu-cheng.yu@intel.com>
Set and restore shadow stack pointer for signals.
Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
---
arch/x86/ia32/ia32_signal.c | 5 ++++
arch/x86/include/asm/cet.h | 7 +++++
arch/x86/include/uapi/asm/sigcontext.h | 4 +++
arch/x86/kernel/cet.c | 51 ++++++++++++++++++++++++++++++++++
arch/x86/kernel/signal.c | 11 ++++++++
5 files changed, 78 insertions(+)
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c
index 86b1341cba9a..26a776baff7c 100644
--- a/arch/x86/ia32/ia32_signal.c
+++ b/arch/x86/ia32/ia32_signal.c
@@ -34,6 +34,7 @@
#include <asm/sigframe.h>
#include <asm/sighandling.h>
#include <asm/smap.h>
+#include <asm/cet.h>
/*
* Do a signal return; undo the signal stack.
@@ -74,6 +75,7 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
unsigned int tmpflags, err = 0;
void __user *buf;
u32 tmp;
+ u32 ssp;
/* Always make any pending restarted system calls return -EINTR */
current->restart_block.fn = do_no_restart_syscall;
@@ -104,9 +106,11 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
get_user_ex(tmp, &sc->fpstate);
buf = compat_ptr(tmp);
+ get_user_ex(ssp, &sc->ssp);
} get_user_catch(err);
err |= fpu__restore_sig(buf, 1);
+ err |= cet_restore_signal((unsigned long)ssp);
force_iret();
@@ -194,6 +198,7 @@ static int ia32_setup_sigcontext(struct sigcontext_32 __user *sc,
put_user_ex(current->thread.trap_nr, &sc->trapno);
put_user_ex(current->thread.error_code, &sc->err);
put_user_ex(regs->ip, &sc->ip);
+ put_user_ex((u32)cet_get_shstk_ptr(), &sc->ssp);
put_user_ex(regs->cs, (unsigned int __user *)&sc->cs);
put_user_ex(regs->flags, &sc->flags);
put_user_ex(regs->sp, &sc->sp_at_signal);
diff --git a/arch/x86/include/asm/cet.h b/arch/x86/include/asm/cet.h
index 9d5bc1efc9b7..5507469cb803 100644
--- a/arch/x86/include/asm/cet.h
+++ b/arch/x86/include/asm/cet.h
@@ -17,14 +17,21 @@ struct cet_stat {
#ifdef CONFIG_X86_INTEL_CET
unsigned long cet_get_shstk_ptr(void);
+int cet_push_shstk(int ia32, unsigned long ssp, unsigned long val);
int cet_setup_shstk(void);
void cet_disable_shstk(void);
void cet_disable_free_shstk(struct task_struct *p);
+int cet_restore_signal(unsigned long ssp);
+int cet_setup_signal(int ia32, unsigned long addr);
#else
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 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; }
+static inline int cet_setup_signal(int ia32, unsigned long addr) { return 0; }
#endif
#endif /* __ASSEMBLY__ */
diff --git a/arch/x86/include/uapi/asm/sigcontext.h b/arch/x86/include/uapi/asm/sigcontext.h
index 844d60eb1882..6c8997a0156a 100644
--- a/arch/x86/include/uapi/asm/sigcontext.h
+++ b/arch/x86/include/uapi/asm/sigcontext.h
@@ -230,6 +230,7 @@ struct sigcontext_32 {
__u32 fpstate; /* Zero when no FPU/extended context */
__u32 oldmask;
__u32 cr2;
+ __u32 ssp;
};
/*
@@ -262,6 +263,7 @@ struct sigcontext_64 {
__u64 trapno;
__u64 oldmask;
__u64 cr2;
+ __u64 ssp;
/*
* fpstate is really (struct _fpstate *) or (struct _xstate *)
@@ -320,6 +322,7 @@ struct sigcontext {
struct _fpstate __user *fpstate;
__u32 oldmask;
__u32 cr2;
+ __u32 ssp;
};
# else /* __x86_64__: */
struct sigcontext {
@@ -377,6 +380,7 @@ struct sigcontext {
__u64 trapno;
__u64 oldmask;
__u64 cr2;
+ __u64 ssp;
struct _fpstate __user *fpstate; /* Zero when no FPU context */
# ifdef __ILP32__
__u32 __fpstate_pad;
diff --git a/arch/x86/kernel/cet.c b/arch/x86/kernel/cet.c
index 8abbfd44322a..6f445ce94c83 100644
--- a/arch/x86/kernel/cet.c
+++ b/arch/x86/kernel/cet.c
@@ -17,6 +17,7 @@
#include <asm/fpu/xstate.h>
#include <asm/fpu/types.h>
#include <asm/cet.h>
+#include <asm/special_insns.h>
#define SHSTK_SIZE (0x8000 * (test_thread_flag(TIF_IA32) ? 4 : 8))
@@ -47,6 +48,24 @@ unsigned long cet_get_shstk_ptr(void)
return ptr;
}
+int cet_push_shstk(int ia32, unsigned long ssp, unsigned long val)
+{
+ if (val >= TASK_SIZE)
+ return -EINVAL;
+
+ if (IS_ENABLED(CONFIG_IA32_EMULATION) && ia32) {
+ if (!IS_ALIGNED(ssp, 4))
+ return -EINVAL;
+ cet_set_shstk_ptr(ssp);
+ return write_user_shstk_32(ssp, (unsigned int)val);
+ } else {
+ if (!IS_ALIGNED(ssp, 8))
+ return -EINVAL;
+ cet_set_shstk_ptr(ssp);
+ return write_user_shstk_64(ssp, val);
+ }
+}
+
static unsigned long shstk_mmap(unsigned long addr, unsigned long len)
{
struct mm_struct *mm = current->mm;
@@ -121,3 +140,35 @@ void cet_disable_free_shstk(struct task_struct *tsk)
tsk->thread.cet.shstk_enabled = 0;
}
+
+int cet_restore_signal(unsigned long ssp)
+{
+ if (!current->thread.cet.shstk_enabled)
+ return 0;
+ return cet_set_shstk_ptr(ssp);
+}
+
+int cet_setup_signal(int ia32, unsigned long rstor_addr)
+{
+ unsigned long ssp;
+ struct cet_stat *cet = ¤t->thread.cet;
+
+ if (!current->thread.cet.shstk_enabled)
+ return 0;
+
+ ssp = cet_get_shstk_ptr();
+
+ /*
+ * Put the restorer address on the shstk
+ */
+ if (ia32)
+ ssp -= sizeof(u32);
+ else
+ ssp -= sizeof(rstor_addr);
+
+ if (ssp >= (cet->shstk_base + cet->shstk_size) ||
+ ssp < cet->shstk_base)
+ return -EINVAL;
+
+ return cet_push_shstk(ia32, ssp, rstor_addr);
+}
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index da270b95fe4d..86fb897cae19 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -46,6 +46,7 @@
#include <asm/sigframe.h>
#include <asm/signal.h>
+#include <asm/cet.h>
#define COPY(x) do { \
get_user_ex(regs->x, &sc->x); \
@@ -102,6 +103,7 @@ static int restore_sigcontext(struct pt_regs *regs,
void __user *buf;
unsigned int tmpflags;
unsigned int err = 0;
+ unsigned long ssp = 0;
/* Always make any pending restarted system calls return -EINTR */
current->restart_block.fn = do_no_restart_syscall;
@@ -148,9 +150,11 @@ static int restore_sigcontext(struct pt_regs *regs,
get_user_ex(buf_val, &sc->fpstate);
buf = (void __user *)buf_val;
+ get_user_ex(ssp, &sc->ssp);
} get_user_catch(err);
err |= fpu__restore_sig(buf, IS_ENABLED(CONFIG_X86_32));
+ err |= cet_restore_signal(ssp);
force_iret();
@@ -193,6 +197,7 @@ int setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
put_user_ex(current->thread.trap_nr, &sc->trapno);
put_user_ex(current->thread.error_code, &sc->err);
put_user_ex(regs->ip, &sc->ip);
+ put_user_ex(cet_get_shstk_ptr(), &sc->ssp);
#ifdef CONFIG_X86_32
put_user_ex(regs->cs, (unsigned int __user *)&sc->cs);
put_user_ex(regs->flags, &sc->flags);
@@ -742,6 +747,12 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)
user_disable_single_step(current);
failed = (setup_rt_frame(ksig, regs) < 0);
+ if (!failed) {
+ unsigned long rstor = (unsigned long)ksig->ka.sa.sa_restorer;
+ int ia32 = is_ia32_frame(ksig);
+
+ failed = cet_setup_signal(ia32, rstor);
+ }
if (!failed) {
/*
* Clear the direction flag as per the ABI for function entry.
--
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 ` Yu-cheng Yu [this message]
2018-06-07 14:38 ` [PATCH 03/10] x86/cet: Signal handling for shadow stack 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 ` [PATCH 04/10] x86/cet: Handle thread " Yu-cheng Yu
2018-06-07 14:38 ` 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-4-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.