From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753569AbbCIULZ (ORCPT ); Mon, 9 Mar 2015 16:11:25 -0400 Received: from mail-la0-f46.google.com ([209.85.215.46]:45442 "EHLO mail-la0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751490AbbCIULY (ORCPT ); Mon, 9 Mar 2015 16:11:24 -0400 MIME-Version: 1.0 In-Reply-To: <1425926364-9526-4-git-send-email-dvlasenk@redhat.com> References: <1425926364-9526-1-git-send-email-dvlasenk@redhat.com> <1425926364-9526-4-git-send-email-dvlasenk@redhat.com> From: Andy Lutomirski Date: Mon, 9 Mar 2015 13:11:02 -0700 Message-ID: Subject: Re: [PATCH 3/4] x86: save user rsp in pt_regs->sp on SYSCALL64 fastpath To: Denys Vlasenko Cc: Linus Torvalds , Steven Rostedt , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , Oleg Nesterov , Frederic Weisbecker , Alexei Starovoitov , Will Drewry , Kees Cook , X86 ML , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Mar 9, 2015 at 11:39 AM, Denys Vlasenko wrote: > PER_CPU(old_rsp) usage is simplified - now it is used only > as temp storage, and userspace stack pointer is immediately stored > in pt_regs->sp on syscall entry, instead of being used later, > on syscall exit. > > Instead of PER_CPU(old_rsp) and task->thread.usersp, C code > uses pt_regs->sp now. > > FIXUP/RESTORE_TOP_OF_STACK are simplified. > > 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: x86@kernel.org > CC: linux-kernel@vger.kernel.org Looks correct. > @@ -253,11 +247,13 @@ GLOBAL(system_call_after_swapgs) > */ > ENABLE_INTERRUPTS(CLBR_NONE) > ALLOC_PT_GPREGS_ON_STACK 8 /* +8: space for orig_ax */ > + movq %rcx,RIP(%rsp) > + movq PER_CPU_VAR(old_rsp),%rcx > + movq %r11,EFLAGS(%rsp) > + movq %rcx,RSP(%rsp) > + movq_cfi rax,ORIG_RAX > SAVE_C_REGS_EXCEPT_RAX_RCX_R11 > movq $-ENOSYS,RAX(%rsp) > - movq_cfi rax,ORIG_RAX > - movq %r11,EFLAGS(%rsp) > - movq %rcx,RIP(%rsp) Why the reordering? --Andy