Re: [PATCH] x86: fix a bug introduced by "allocate full pt_regs" commit

2015-02-26 Thread Andy Lutomirski
On Thu, Feb 26, 2015 at 6:08 AM, Denys Vlasenko  wrote:
> If syscall_trace_enter_phase1 returns 0,
> code restores %rax from pt_regs->ax, but should restore it from
> pt_regs->orig_ax.
>
> The bug crept in because LOAD_ARGS macro was very sublty different
> from RESTORE_ARGS, it had only two callsites and only this one
> was using that difference.

I folded this in to the original patch to avoid breaking bisection.  I
put the missing -ARGOFFSET in and then removed it again in the
appropriate place later in the series.

--Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] x86: fix a bug introduced by "allocate full pt_regs" commit

2015-02-26 Thread Denys Vlasenko
If syscall_trace_enter_phase1 returns 0,
code restores %rax from pt_regs->ax, but should restore it from
pt_regs->orig_ax.

The bug crept in because LOAD_ARGS macro was very sublty different
from RESTORE_ARGS, it had only two callsites and only this one
was using that difference.

Signed-off-by: Denys Vlasenko 
CC: Linus Torvalds 
CC: Steven Rostedt 
CC: Ingo Molnar 
CC: Borislav Petkov 
CC: "H. Peter Anvin" 
CC: Andy Lutomirski 
CC: Oleg Nesterov 
CC: Frederic Weisbecker 
CC: Alexei Starovoitov 
CC: Will Drewry 
CC: Kees Cook 
CC: x...@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/entry_64.S | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index da61974..519498d 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -316,7 +316,8 @@ tracesys:
call syscall_trace_enter_phase1
test %rax, %rax
jnz tracesys_phase2 /* if needed, run the slow path */
-   RESTORE_C_REGS  /* else restore clobbered regs */
+   RESTORE_C_REGS_EXCEPT_RAX   /* else restore clobbered regs */
+   movq ORIG_RAX(%rsp), %rax
jmp system_call_fastpath/*  and return to the fast path */
 
 tracesys_phase2:
-- 
1.8.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] x86: fix a bug introduced by allocate full pt_regs commit

2015-02-26 Thread Denys Vlasenko
If syscall_trace_enter_phase1 returns 0,
code restores %rax from pt_regs-ax, but should restore it from
pt_regs-orig_ax.

The bug crept in because LOAD_ARGS macro was very sublty different
from RESTORE_ARGS, it had only two callsites and only this one
was using that difference.

Signed-off-by: Denys Vlasenko dvlas...@redhat.com
CC: Linus Torvalds torva...@linux-foundation.org
CC: Steven Rostedt rost...@goodmis.org
CC: Ingo Molnar mi...@kernel.org
CC: Borislav Petkov b...@alien8.de
CC: H. Peter Anvin h...@zytor.com
CC: Andy Lutomirski l...@amacapital.net
CC: Oleg Nesterov o...@redhat.com
CC: Frederic Weisbecker fweis...@gmail.com
CC: Alexei Starovoitov a...@plumgrid.com
CC: Will Drewry w...@chromium.org
CC: Kees Cook keesc...@chromium.org
CC: x...@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/entry_64.S | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index da61974..519498d 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -316,7 +316,8 @@ tracesys:
call syscall_trace_enter_phase1
test %rax, %rax
jnz tracesys_phase2 /* if needed, run the slow path */
-   RESTORE_C_REGS  /* else restore clobbered regs */
+   RESTORE_C_REGS_EXCEPT_RAX   /* else restore clobbered regs */
+   movq ORIG_RAX(%rsp), %rax
jmp system_call_fastpath/*  and return to the fast path */
 
 tracesys_phase2:
-- 
1.8.1.4

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86: fix a bug introduced by allocate full pt_regs commit

2015-02-26 Thread Andy Lutomirski
On Thu, Feb 26, 2015 at 6:08 AM, Denys Vlasenko dvlas...@redhat.com wrote:
 If syscall_trace_enter_phase1 returns 0,
 code restores %rax from pt_regs-ax, but should restore it from
 pt_regs-orig_ax.

 The bug crept in because LOAD_ARGS macro was very sublty different
 from RESTORE_ARGS, it had only two callsites and only this one
 was using that difference.

I folded this in to the original patch to avoid breaking bisection.  I
put the missing -ARGOFFSET in and then removed it again in the
appropriate place later in the series.

--Andy
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/