lkml.org 
[lkml]   [2015]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH] x86_64, asm: Work around AMD SYSRET SS descriptor attribute issue
From
On Mon, Apr 27, 2015 at 4:35 AM, Borislav Petkov <bp@alien8.de> wrote:
>
> /*
> * Change top 16 bits to be the sign-extension of 47th bit, if this
> * changed %rcx, it was not canonical.
> */
> ALTERNATIVE "", \
> "shl $(64 - (47+1)), %rcx; \
> sar $(64 - (47+1)), %rcx; \
> cmpq %rcx, %r11; \
> jne opportunistic_sysret_failed", X86_BUG_SYSRET_CANON_RCX

Guys, if we're looking at cycles for this, then don't do the "exact
canonical test". and go back to just doing

shr $__VIRTUAL_MASK_SHIFT, %rcx
jnz opportunistic_sysret_failed

which is much smaller. In fact, aim to make the conditional jump be a
two-byte one (jump forward to another jump if required - it's a
slow-path that doesn't matter at *all* for the taken case), and the
end result is just six bytes. That way you can use alternative to
replace it with one single noop on AMD.

Because dammit, if we're playing these kinds of games, let's do it
*right*. No half measures.

Linus


\
 
 \ /
  Last update: 2015-04-27 17:21    [W:0.476 / U:1.512 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site