arch/x86/kernel/ptrace.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index 50267386b766..e7b019cd88d3 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c @@ -353,6 +353,7 @@ static int set_segment_reg(struct task_struct *task, static unsigned long get_flags(struct task_struct *task) { + int bit = 32; unsigned long retval = task_pt_regs(task)->flags; /* @@ -361,7 +362,12 @@ static unsigned long get_flags(struct task_struct *task) if (test_tsk_thread_flag(task, TIF_FORCED_TF)) retval &= ~X86_EFLAGS_TF; - return retval; +#ifdef CONFIG_IA32_EMULATION + /* Set bit 32 for 64-bit system calls, bit 33 for compat system calls */ + bit += (task_thread_info(task)->status & TS_COMPAT) / TS_COMPAT; +#endif + + return retval | (1ul << bit); } static int set_flags(struct task_struct *task, unsigned long value)