lkml.org 
[lkml]   [2021]   [Aug]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/24] x86/traps: Add C verion of SWITCH_TO_KERNEL_CR3 as switch_to_kernel_cr3()
    Date
    From: Lai Jiangshan <laijs@linux.alibaba.com>

    The C version switch_to_kernel_cr3() implements SWITCH_TO_KERNEL_CR3().

    No functional difference intended.

    Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
    ---
    arch/x86/entry/traps.c | 24 ++++++++++++++++++++++++
    1 file changed, 24 insertions(+)

    diff --git a/arch/x86/entry/traps.c b/arch/x86/entry/traps.c
    index ef07ae5fb3a0..9b7d0f15402e 100644
    --- a/arch/x86/entry/traps.c
    +++ b/arch/x86/entry/traps.c
    @@ -765,6 +765,30 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
    BUG_ON(!user_mode(&new_stack->regs));
    return new_stack;
    }
    +
    +#ifdef CONFIG_PAGE_TABLE_ISOLATION
    +static __always_inline void pti_switch_to_kernel_cr3(unsigned long user_cr3)
    +{
    + /*
    + * Clear PCID and "PAGE_TABLE_ISOLATION bit", point CR3
    + * at kernel pagetables:
    + */
    + unsigned long cr3 = user_cr3 & ~PTI_USER_PGTABLE_AND_PCID_MASK;
    +
    + if (static_cpu_has(X86_FEATURE_PCID))
    + cr3 |= X86_CR3_PCID_NOFLUSH;
    +
    + native_write_cr3(cr3);
    +}
    +
    +static __always_inline void switch_to_kernel_cr3(void)
    +{
    + if (static_cpu_has(X86_FEATURE_PTI))
    + pti_switch_to_kernel_cr3(__native_read_cr3());
    +}
    +#else
    +static __always_inline void switch_to_kernel_cr3(void) {}
    +#endif
    #endif

    static bool is_sysenter_singlestep(struct pt_regs *regs)
    --
    2.19.1.6.gb485710b
    \
     
     \ /
      Last update: 2021-08-31 20:07    [W:4.711 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site