lkml.org 
[lkml]   [2017]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC 17/17] x86/traps: Use a new on_thread_stack() helper to clean up an assertion
    Date
    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    ---
    arch/x86/include/asm/processor.h | 17 +++++++++++++++++
    arch/x86/include/asm/thread_info.h | 11 -----------
    arch/x86/kernel/traps.c | 3 +--
    3 files changed, 18 insertions(+), 13 deletions(-)

    diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
    index 4c137472f530..b6f8dc11c222 100644
    --- a/arch/x86/include/asm/processor.h
    +++ b/arch/x86/include/asm/processor.h
    @@ -534,6 +534,23 @@ static inline unsigned long current_top_of_stack(void)
    #endif
    }

    +static inline unsigned long current_stack_pointer(void)
    +{
    + unsigned long sp;
    +#ifdef CONFIG_X86_64
    + asm("mov %%rsp,%0" : "=g" (sp));
    +#else
    + asm("mov %%esp,%0" : "=g" (sp));
    +#endif
    + return sp;
    +}
    +
    +static inline bool on_thread_stack(void)
    +{
    + return (unsigned long)(current_top_of_stack() -
    + current_stack_pointer()) < THREAD_SIZE;
    +}
    +
    #ifdef CONFIG_PARAVIRT
    #include <asm/paravirt.h>
    #else
    diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
    index e00e1bd6e7b3..90e1f9b84534 100644
    --- a/arch/x86/include/asm/thread_info.h
    +++ b/arch/x86/include/asm/thread_info.h
    @@ -155,17 +155,6 @@ struct thread_info {
    */
    #ifndef __ASSEMBLY__

    -static inline unsigned long current_stack_pointer(void)
    -{
    - unsigned long sp;
    -#ifdef CONFIG_X86_64
    - asm("mov %%rsp,%0" : "=g" (sp));
    -#else
    - asm("mov %%esp,%0" : "=g" (sp));
    -#endif
    - return sp;
    -}
    -
    /*
    * Walks up the stack frames to make sure that the specified object is
    * entirely contained by a single stack frame.
    diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
    index bf54309b85da..0347ed41c92d 100644
    --- a/arch/x86/kernel/traps.c
    +++ b/arch/x86/kernel/traps.c
    @@ -153,8 +153,7 @@ void ist_begin_non_atomic(struct pt_regs *regs)
    * will catch asm bugs and any attempt to use ist_preempt_enable
    * from double_fault.
    */
    - BUG_ON((unsigned long)(current_top_of_stack() -
    - current_stack_pointer()) >= THREAD_SIZE);
    + BUG_ON(!on_thread_stack());

    preempt_enable_no_resched();
    }
    --
    2.13.5
    \
     
     \ /
      Last update: 2017-09-06 23:38    [W:2.607 / U:9.536 seconds]
    ©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site