lkml.org 
[lkml]   [2020]   [Aug]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 34/76] x86/head/64: Switch to initial stack earlier
    Date
    From: Joerg Roedel <jroedel@suse.de>

    Make sure there is a stack once the kernel runs from virual addresses.
    At this stage any secondary CPU which boots will have lost its stack
    because the kernel switched to a new page-table which does not map the
    real-mode stack anymore.

    This is needed for handling early #VC exceptions caused by instructions
    like CPUID.

    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20200724160336.5435-34-joro@8bytes.org
    ---
    arch/x86/kernel/head_64.S | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
    index 057c7bd3eeb6..a5e1939d1dc9 100644
    --- a/arch/x86/kernel/head_64.S
    +++ b/arch/x86/kernel/head_64.S
    @@ -200,6 +200,12 @@ SYM_CODE_START(secondary_startup_64)
    movl initial_gs+4(%rip),%edx
    wrmsr

    + /*
    + * Setup a boot time stack - Any secondary CPU will have lost its stack
    + * by now because the cr3-switch above unmaps the real-mode stack
    + */
    + movq initial_stack(%rip), %rsp
    +
    /* Check if nx is implemented */
    movl $0x80000001, %eax
    cpuid
    @@ -220,9 +226,6 @@ SYM_CODE_START(secondary_startup_64)
    /* Make changes effective */
    movq %rax, %cr0

    - /* Setup a boot time stack */
    - movq initial_stack(%rip), %rsp
    -
    /* zero EFLAGS after setting rsp */
    pushq $0
    popfq
    --
    2.28.0
    \
     
     \ /
      Last update: 2020-08-24 11:14    [W:2.518 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site