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

Attachment: OpenPGP_0xB0DE9DD628BF132F.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to