lkml.org 
[lkml]   [2018]   [Nov]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v2 4/4] x86/static_call: Add inline static call implementation for x86-64
    On Thu, 29 Nov 2018 18:15:39 +0100
    Peter Zijlstra <peterz@infradead.org> wrote:

    > On Thu, Nov 29, 2018 at 08:59:31AM -0800, Andy Lutomirski wrote:
    >
    > > If you make it conditional on CPL, do it for 32-bit as well, add
    > > comments,
    >
    > > and convince yourself that there isn’t a better solution
    > > (like pointing IP at a stub that retpolines to the target by reading
    > > the function pointer, a la the unoptimizable version), then okay, I
    > > guess, with only a small amount of grumbling.
    >
    > Right; so we _could_ grow the trampoline with a retpoline indirect call
    > and ret. It just makes the trampoline a whole lot bigger, but it could
    > work.

    Can't we make use of the callee clobbered registers? I mean, we know
    that call is being made when the int3 is triggered. Then we can save
    the return address in one register, and the jump location in another,
    and then just call a trampoline that does:

    r8 = return address
    r9 = function to call

    push r8
    jmp *r9

    Then have the regs->ip point to that trampoline.

    -- Steve

    \
     
     \ /
      Last update: 2018-11-29 18:20    [W:2.666 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site