The PTI path does this:

        ...
        SWITCH_TO_KERNEL_CR3 scratch_reg=%rsp
        /* Load the top of the task stack into RSP */
        movq    CPU_ENTRY_AREA_tss + TSS_sp1 + CPU_ENTRY_AREA, %rsp

And the non-PTI entry path does this:

        ...
        movq    %rsp, PER_CPU_VAR(rsp_scratch)
        movq    PER_CPU_VAR(cpu_current_top_of_stack), %rsp

Both "mov ___, %rsp" instructions have the kernel %GS value in place and
both are running on a good kernel CR3.  Does anybody remember why we
don't use cpu_current_top_of_stack in the PTI-on case?

I'm wondering if it was because we, at some point, did the mov ...,
%rsp before CR3 was good.  But it doesn't look like we do that now, so
should we maybe make both copies do:

        movq    PER_CPU_VAR(cpu_current_top_of_stack), %rsp

for consistency?

Reply via email to