* [PATCH] x86/asm/entry/32: Reinstate clearing of pt_regs->r8..r11 on EFAULT path
@ 2015-06-07 18:24 Denys Vlasenko
2015-06-08 6:50 ` Ingo Molnar
2015-06-08 22:24 ` [tip:x86/asm] x86/asm/entry/32: Reinstate clearing of pt_regs-> r8..r11 " tip-bot for Denys Vlasenko
0 siblings, 2 replies; 4+ messages in thread
From: Denys Vlasenko @ 2015-06-07 18:24 UTC (permalink / raw)
To: Ingo Molnar
Cc: Denys Vlasenko, Linus Torvalds, Steven Rostedt, Borislav Petkov,
H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
x86, linux-kernel
I broke this recently when I changed pt_regs->r8..r11 clearing logic
in INT 80 code path.
There is a branch from SYSENTER/SYSCALL code to INT 80 code:
if we fail to retrieve arg6, we return EFAULT. Before this patch,
in this case we don't clear pt_regs->r8..r11.
This patch fixes this. The resulting code is smaller and simpler.
While at it, remove incorrect comment about syscall dispatching CALL insn:
it does not use RIP-relative addressing form (the comment was meant to be
"TODO: make this rip-relative", and morphed since then, dropping "TODO").
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Alexei Starovoitov <ast@plumgrid.com>
CC: Will Drewry <wad@chromium.org>
CC: Kees Cook <keescook@chromium.org>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
---
arch/x86/entry/entry_64_compat.S | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
index 9558dac..b80f8d4 100644
--- a/arch/x86/entry/entry_64_compat.S
+++ b/arch/x86/entry/entry_64_compat.S
@@ -413,9 +413,7 @@ END(ia32_cstar_target)
ia32_badarg:
ASM_CLAC
- movq $-EFAULT, %rax
- jmp ia32_sysret
-
+ movq $-EFAULT, RAX(%rsp)
ia32_ret_from_sys_call:
xorl %eax, %eax /* Do not leak kernel information */
movq %rax, R11(%rsp)
@@ -486,9 +484,7 @@ ia32_do_call:
cmpq $(IA32_NR_syscalls-1), %rax
ja 1f
- call *ia32_sys_call_table(, %rax, 8) /* RIP relative */
-
-ia32_sysret:
+ call *ia32_sys_call_table(, %rax, 8)
movq %rax, RAX(%rsp)
1:
jmp int_ret_from_sys_call
--
1.8.1.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] x86/asm/entry/32: Reinstate clearing of pt_regs->r8..r11 on EFAULT path
2015-06-07 18:24 [PATCH] x86/asm/entry/32: Reinstate clearing of pt_regs->r8..r11 on EFAULT path Denys Vlasenko
@ 2015-06-08 6:50 ` Ingo Molnar
2015-06-08 12:55 ` Denys Vlasenko
2015-06-08 22:24 ` [tip:x86/asm] x86/asm/entry/32: Reinstate clearing of pt_regs-> r8..r11 " tip-bot for Denys Vlasenko
1 sibling, 1 reply; 4+ messages in thread
From: Ingo Molnar @ 2015-06-08 6:50 UTC (permalink / raw)
To: Denys Vlasenko
Cc: Linus Torvalds, Steven Rostedt, Borislav Petkov, H. Peter Anvin,
Andy Lutomirski, Oleg Nesterov, Frederic Weisbecker,
Alexei Starovoitov, Will Drewry, Kees Cook, x86, linux-kernel
* Denys Vlasenko <dvlasenk@redhat.com> wrote:
> I broke this recently when I changed pt_regs->r8..r11 clearing logic
> in INT 80 code path.
>
> There is a branch from SYSENTER/SYSCALL code to INT 80 code:
> if we fail to retrieve arg6, we return EFAULT. Before this patch,
> in this case we don't clear pt_regs->r8..r11.
>
> This patch fixes this. The resulting code is smaller and simpler.
So how did you notice this bug - through actual info leak testing, or review?
Thanks,
Ingo
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] x86/asm/entry/32: Reinstate clearing of pt_regs->r8..r11 on EFAULT path
2015-06-08 6:50 ` Ingo Molnar
@ 2015-06-08 12:55 ` Denys Vlasenko
0 siblings, 0 replies; 4+ messages in thread
From: Denys Vlasenko @ 2015-06-08 12:55 UTC (permalink / raw)
To: Ingo Molnar
Cc: Linus Torvalds, Steven Rostedt, Borislav Petkov, H. Peter Anvin,
Andy Lutomirski, Oleg Nesterov, Frederic Weisbecker,
Alexei Starovoitov, Will Drewry, Kees Cook, x86, linux-kernel
On 06/08/2015 08:50 AM, Ingo Molnar wrote:
> * Denys Vlasenko <dvlasenk@redhat.com> wrote:
>
>> I broke this recently when I changed pt_regs->r8..r11 clearing logic
>> in INT 80 code path.
>>
>> There is a branch from SYSENTER/SYSCALL code to INT 80 code:
>> if we fail to retrieve arg6, we return EFAULT. Before this patch,
>> in this case we don't clear pt_regs->r8..r11.
>>
>> This patch fixes this. The resulting code is smaller and simpler.
>
> So how did you notice this bug - through actual info leak testing, or review?
By reviewing my own patch.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [tip:x86/asm] x86/asm/entry/32: Reinstate clearing of pt_regs-> r8..r11 on EFAULT path
2015-06-07 18:24 [PATCH] x86/asm/entry/32: Reinstate clearing of pt_regs->r8..r11 on EFAULT path Denys Vlasenko
2015-06-08 6:50 ` Ingo Molnar
@ 2015-06-08 22:24 ` tip-bot for Denys Vlasenko
1 sibling, 0 replies; 4+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-06-08 22:24 UTC (permalink / raw)
To: linux-tip-commits
Cc: oleg, ast, keescook, peterz, torvalds, fweisbec, hpa, rostedt,
akpm, wad, bp, linux-kernel, luto, dvlasenk, mingo, tglx
Commit-ID: eb47854415825a69b1c578e7487da571227ba25a
Gitweb: http://git.kernel.org/tip/eb47854415825a69b1c578e7487da571227ba25a
Author: Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Sun, 7 Jun 2015 20:24:30 +0200
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Mon, 8 Jun 2015 23:43:37 +0200
x86/asm/entry/32: Reinstate clearing of pt_regs->r8..r11 on EFAULT path
I broke this recently when I changed pt_regs->r8..r11 clearing
logic in INT 80 code path.
There is a branch from SYSENTER/SYSCALL code to INT 80 code:
if we fail to retrieve arg6, we return EFAULT. Before this
patch, in this case we don't clear pt_regs->r8..r11.
This patch fixes this. The resulting code is smaller and
simpler.
While at it, remove incorrect comment about syscall dispatching
CALL insn: it does not use RIP-relative addressing form (the
comment was meant to be "TODO: make this rip-relative", and
morphed since then, dropping "TODO").
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1433701470-28800-1-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/entry/entry_64_compat.S | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
index 59840e3..5757dde 100644
--- a/arch/x86/entry/entry_64_compat.S
+++ b/arch/x86/entry/entry_64_compat.S
@@ -413,9 +413,7 @@ END(entry_SYSCALL_compat)
ia32_badarg:
ASM_CLAC
- movq $-EFAULT, %rax
- jmp ia32_sysret
-
+ movq $-EFAULT, RAX(%rsp)
ia32_ret_from_sys_call:
xorl %eax, %eax /* Do not leak kernel information */
movq %rax, R11(%rsp)
@@ -486,9 +484,7 @@ ia32_do_call:
cmpq $(IA32_NR_syscalls-1), %rax
ja 1f
- call *ia32_sys_call_table(, %rax, 8) /* RIP relative */
-
-ia32_sysret:
+ call *ia32_sys_call_table(, %rax, 8)
movq %rax, RAX(%rsp)
1:
jmp int_ret_from_sys_call
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-06-08 22:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-07 18:24 [PATCH] x86/asm/entry/32: Reinstate clearing of pt_regs->r8..r11 on EFAULT path Denys Vlasenko
2015-06-08 6:50 ` Ingo Molnar
2015-06-08 12:55 ` Denys Vlasenko
2015-06-08 22:24 ` [tip:x86/asm] x86/asm/entry/32: Reinstate clearing of pt_regs-> r8..r11 " tip-bot for Denys Vlasenko
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.