lkml.org 
[lkml]   [2015]   [Aug]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v10 06/20] x86/xen: Add stack frame dependency to hypercall inline asm calls
    Date
    If a hypercall is inlined at the beginning of a function, gcc can insert
    the call instruction before setting up a stack frame, which breaks frame
    pointer convention if CONFIG_FRAME_POINTER is enabled and can result in
    a bad stack trace.

    Force a stack frame to be created if CONFIG_FRAME_POINTER is enabled by
    listing the stack pointer as an output operand for the hypercall inline
    asm statements.

    Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: David Vrabel <david.vrabel@citrix.com>
    ---
    arch/x86/include/asm/xen/hypercall.h | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/arch/x86/include/asm/xen/hypercall.h b/arch/x86/include/asm/xen/hypercall.h
    index ca08a27..4488fbc 100644
    --- a/arch/x86/include/asm/xen/hypercall.h
    +++ b/arch/x86/include/asm/xen/hypercall.h
    @@ -110,9 +110,10 @@ extern struct { char _entry[32]; } hypercall_page[];
    register unsigned long __arg2 asm(__HYPERCALL_ARG2REG) = __arg2; \
    register unsigned long __arg3 asm(__HYPERCALL_ARG3REG) = __arg3; \
    register unsigned long __arg4 asm(__HYPERCALL_ARG4REG) = __arg4; \
    - register unsigned long __arg5 asm(__HYPERCALL_ARG5REG) = __arg5;
    + register unsigned long __arg5 asm(__HYPERCALL_ARG5REG) = __arg5; \
    + register void *__sp asm(_ASM_SP);

    -#define __HYPERCALL_0PARAM "=r" (__res)
    +#define __HYPERCALL_0PARAM "=r" (__res), "+r" (__sp)
    #define __HYPERCALL_1PARAM __HYPERCALL_0PARAM, "+r" (__arg1)
    #define __HYPERCALL_2PARAM __HYPERCALL_1PARAM, "+r" (__arg2)
    #define __HYPERCALL_3PARAM __HYPERCALL_2PARAM, "+r" (__arg3)
    --
    2.4.3


    \
     
     \ /
      Last update: 2015-08-14 05:21    [W:4.083 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site