On 14.09.22 18:21, Bill Wendling wrote:
The ZERO_CALL_USED_REGS feature may zero out caller-saved registers before returning. However, alternate code may call this function without first saving %[re]di, because the proper clobbers aren't taken into account.This shows up in spurious_kernel_fault() where the "pte_offset_kernel()" call results in this assembly code: .Ltmp151: #APP # ALT: oldnstr .Ltmp152: .Ltmp153: .Ltmp154: .section .discard.retpoline_safe,"",@progbits .quad .Ltmp154 .text callq *pv_ops+536(%rip) .Ltmp155: .section .parainstructions,"a",@progbits .p2align 3, 0x0 .quad .Ltmp153 .byte 67 .byte .Ltmp155-.Ltmp153 .short 1 .text .Ltmp156: # ALT: padding .zero (-(((.Ltmp157-.Ltmp158)-(.Ltmp156-.Ltmp152))>0))*((.Ltmp157-.Ltmp158)-(.Ltmp156-.Ltmp152)),144 .Ltmp159: .section .altinstructions,"a",@progbits .Ltmp160: .long .Ltmp152-.Ltmp160 .Ltmp161: .long .Ltmp158-.Ltmp161 .short 33040 .byte .Ltmp159-.Ltmp152 .byte .Ltmp157-.Ltmp158 .text .section .altinstr_replacement,"ax",@progbits # ALT: replacement 1 .Ltmp158: movq %rdi, %rax .Ltmp157: .text #NO_APP .Ltmp162: testb $-128, %dil The %dil register was zeroed out by the call to "*pv_ops+536(%rip)". In general, the _paravirt_ident_64() function appears like it shouldn't have any instrumentation or other modifications applied to it. Thus just write it in assembly to avoid having to continually modify it whenever a new feature comes along. Link: https://github.com/KSPP/linux/issues/192 Cc: Kees Cook <[email protected]> Cc: Nick Desaulniers <[email protected]> Cc: Juergen Gross <[email protected]> Cc: "Srivatsa S. Bhat (VMware)" <[email protected]> Cc: Alexey Makhalov <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: Dave Hansen <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Cc: VMware PV-Drivers Reviewers <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Signed-off-by: Bill Wendling <[email protected]> Suggested-by: Peter Zijlstra <[email protected]> Reported-and-tested-by: Nathan Chancellor <[email protected]>
Reviewed-by: Juergen Gross <[email protected]> Juergen
OpenPGP_0xB0DE9DD628BF132F.asc
Description: OpenPGP public key
OpenPGP_signature
Description: OpenPGP digital signature
_______________________________________________ Virtualization mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/virtualization
