| From 82975bc6a6df743b9a01810fb32cb65d0ec5d60b Mon Sep 17 00:00:00 2001 |
| From: Andy Lutomirski <luto@amacapital.net> |
| Date: Fri, 21 Nov 2014 13:26:07 -0800 |
| Subject: uprobes, x86: Fix _TIF_UPROBE vs _TIF_NOTIFY_RESUME |
| |
| From: Andy Lutomirski <luto@amacapital.net> |
| |
| commit 82975bc6a6df743b9a01810fb32cb65d0ec5d60b upstream. |
| |
| x86 call do_notify_resume on paranoid returns if TIF_UPROBE is set but |
| not on non-paranoid returns. I suspect that this is a mistake and that |
| the code only works because int3 is paranoid. |
| |
| Setting _TIF_NOTIFY_RESUME in the uprobe code was probably a workaround |
| for the x86 bug. With that bug fixed, we can remove _TIF_NOTIFY_RESUME |
| from the uprobes code. |
| |
| Reported-by: Oleg Nesterov <oleg@redhat.com> |
| Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com> |
| Acked-by: Borislav Petkov <bp@suse.de> |
| Signed-off-by: Andy Lutomirski <luto@amacapital.net> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/include/asm/thread_info.h | 2 +- |
| kernel/events/uprobes.c | 1 - |
| 2 files changed, 1 insertion(+), 2 deletions(-) |
| |
| --- a/arch/x86/include/asm/thread_info.h |
| +++ b/arch/x86/include/asm/thread_info.h |
| @@ -141,7 +141,7 @@ struct thread_info { |
| /* Only used for 64 bit */ |
| #define _TIF_DO_NOTIFY_MASK \ |
| (_TIF_SIGPENDING | _TIF_MCE_NOTIFY | _TIF_NOTIFY_RESUME | \ |
| - _TIF_USER_RETURN_NOTIFY) |
| + _TIF_USER_RETURN_NOTIFY | _TIF_UPROBE) |
| |
| /* flags to check in __switch_to() */ |
| #define _TIF_WORK_CTXSW \ |
| --- a/kernel/events/uprobes.c |
| +++ b/kernel/events/uprobes.c |
| @@ -1640,7 +1640,6 @@ bool uprobe_deny_signal(void) |
| if (__fatal_signal_pending(t) || arch_uprobe_xol_was_trapped(t)) { |
| utask->state = UTASK_SSTEP_TRAPPED; |
| set_tsk_thread_flag(t, TIF_UPROBE); |
| - set_tsk_thread_flag(t, TIF_NOTIFY_RESUME); |
| } |
| } |
| |