lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CALCETrVzrtMuY_kZZ7HPgnC1+prN8eSKDuBW1TtzJM0naZqGZg@mail.gmail.com>
Date:   Wed, 1 Nov 2017 04:29:21 -0700
From:   Andy Lutomirski <luto@...nel.org>
To:     Borislav Petkov <bp@...e.de>
Cc:     Andy Lutomirski <luto@...nel.org>, X86 ML <x86@...nel.org>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
        Brian Gerst <brgerst@...il.com>,
        Dave Hansen <dave.hansen@...el.com>,
        Linus Torvalds <torvalds@...ux-foundation.org>
Subject: Re: [PATCH 07/18] x86/asm/64: Merge the fast and slow SYSRET paths

On Fri, Oct 27, 2017 at 1:11 PM, Borislav Petkov <bp@...e.de> wrote:
> On Thu, Oct 26, 2017 at 01:26:39AM -0700, Andy Lutomirski wrote:
>> They did almost the same thing.  Remove a bunch of pointless
>> instructions (mostly hidden in macros) and reduce cognitive load by
>> merging them.
>>
>> Signed-off-by: Andy Lutomirski <luto@...nel.org>
>> ---
>>  arch/x86/entry/entry_64.S | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
>> index 9dafafa3e0ec..c855ee91a3a5 100644
>> --- a/arch/x86/entry/entry_64.S
>> +++ b/arch/x86/entry/entry_64.S
>> @@ -220,10 +220,9 @@ entry_SYSCALL_64_fastpath:
>>       TRACE_IRQS_ON           /* user mode is traced as IRQs on */
>>       movq    RIP(%rsp), %rcx
>>       movq    EFLAGS(%rsp), %r11
>> -     RESTORE_C_REGS_EXCEPT_RCX_R11
>> -     movq    RSP(%rsp), %rsp
>> +     addq    $6*8, %rsp      /* skip extra regs -- they were preserved */
>>       UNWIND_HINT_EMPTY
>> -     USERGS_SYSRET64
>> +     jmp     .Lpop_c_regs_except_rcx_r11_and_sysret
>>
>>  1:
>>       /*
>> @@ -315,6 +314,7 @@ syscall_return_via_sysret:
>>       /* rcx and r11 are already restored (see code above) */
>>       UNWIND_HINT_EMPTY
>>       POP_EXTRA_REGS
>> +.Lpop_c_regs_except_rcx_r11_and_sysret:
>
> .Lpop_regs_sysret I guess.
>

I'm inclined to leave it.  I first wrote it without the long name and
then I had to re-read the code to make sure I got the register state
right.  The long name serves as documentation that we need rcx and r11
to have special contents.  There's only one place that jumps there and
it's in the same function.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ