lkml.org 
[lkml]   [2022]   [Mar]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/core] x86/ibt,paravirt: Sprinkle ENDBR
    The following commit has been merged into the x86/core branch of tip:

    Commit-ID: c3b037917c6a4cbb09ab2d6ccf19f02335ad1847
    Gitweb: https://git.kernel.org/tip/c3b037917c6a4cbb09ab2d6ccf19f02335ad1847
    Author: Peter Zijlstra <peterz@infradead.org>
    AuthorDate: Tue, 08 Mar 2022 16:30:26 +01:00
    Committer: Peter Zijlstra <peterz@infradead.org>
    CommitterDate: Tue, 15 Mar 2022 10:32:36 +01:00

    x86/ibt,paravirt: Sprinkle ENDBR

    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
    Link: https://lore.kernel.org/r/20220308154318.051635891@infradead.org
    ---
    arch/x86/include/asm/paravirt.h | 1 +
    arch/x86/include/asm/qspinlock_paravirt.h | 3 +++
    arch/x86/kernel/kvm.c | 3 ++-
    arch/x86/kernel/paravirt.c | 2 ++
    4 files changed, 8 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
    index 0d76502..964442b 100644
    --- a/arch/x86/include/asm/paravirt.h
    +++ b/arch/x86/include/asm/paravirt.h
    @@ -666,6 +666,7 @@ bool __raw_callee_save___native_vcpu_is_preempted(long cpu);
    ".globl " PV_THUNK_NAME(func) ";" \
    ".type " PV_THUNK_NAME(func) ", @function;" \
    PV_THUNK_NAME(func) ":" \
    + ASM_ENDBR \
    FRAME_BEGIN \
    PV_SAVE_ALL_CALLER_REGS \
    "call " #func ";" \
    diff --git a/arch/x86/include/asm/qspinlock_paravirt.h b/arch/x86/include/asm/qspinlock_paravirt.h
    index 1474cf9..892fd8c 100644
    --- a/arch/x86/include/asm/qspinlock_paravirt.h
    +++ b/arch/x86/include/asm/qspinlock_paravirt.h
    @@ -2,6 +2,8 @@
    #ifndef __ASM_QSPINLOCK_PARAVIRT_H
    #define __ASM_QSPINLOCK_PARAVIRT_H

    +#include <asm/ibt.h>
    +
    /*
    * For x86-64, PV_CALLEE_SAVE_REGS_THUNK() saves and restores 8 64-bit
    * registers. For i386, however, only 1 32-bit register needs to be saved
    @@ -39,6 +41,7 @@ asm (".pushsection .text;"
    ".type " PV_UNLOCK ", @function;"
    ".align 4,0x90;"
    PV_UNLOCK ": "
    + ASM_ENDBR
    FRAME_BEGIN
    "push %rdx;"
    "mov $0x1,%eax;"
    diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
    index d77481e..79e0b8d 100644
    --- a/arch/x86/kernel/kvm.c
    +++ b/arch/x86/kernel/kvm.c
    @@ -1029,10 +1029,11 @@ asm(
    ".global __raw_callee_save___kvm_vcpu_is_preempted;"
    ".type __raw_callee_save___kvm_vcpu_is_preempted, @function;"
    "__raw_callee_save___kvm_vcpu_is_preempted:"
    +ASM_ENDBR
    "movq __per_cpu_offset(,%rdi,8), %rax;"
    "cmpb $0, " __stringify(KVM_STEAL_TIME_preempted) "+steal_time(%rax);"
    "setne %al;"
    -"ret;"
    +ASM_RET
    ".size __raw_callee_save___kvm_vcpu_is_preempted, .-__raw_callee_save___kvm_vcpu_is_preempted;"
    ".popsection");

    diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
    index 6ecbbb0..7ca2d46 100644
    --- a/arch/x86/kernel/paravirt.c
    +++ b/arch/x86/kernel/paravirt.c
    @@ -41,6 +41,7 @@ extern void _paravirt_nop(void);
    asm (".pushsection .entry.text, \"ax\"\n"
    ".global _paravirt_nop\n"
    "_paravirt_nop:\n\t"
    + ASM_ENDBR
    ASM_RET
    ".size _paravirt_nop, . - _paravirt_nop\n\t"
    ".type _paravirt_nop, @function\n\t"
    @@ -50,6 +51,7 @@ asm (".pushsection .entry.text, \"ax\"\n"
    asm (".pushsection .entry.text, \"ax\"\n"
    ".global paravirt_ret0\n"
    "paravirt_ret0:\n\t"
    + ASM_ENDBR
    "xor %" _ASM_AX ", %" _ASM_AX ";\n\t"
    ASM_RET
    ".size paravirt_ret0, . - paravirt_ret0\n\t"
    \
     
     \ /
      Last update: 2022-03-15 11:47    [W:4.308 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site