[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v11 7/11] x86/entry: Avoid using alternatives in NMI/#MC paths



On 26/01/18 12:23, Jan Beulich wrote:
>>>> On 25.01.18 at 18:21, <andrew.cooper3@xxxxxxxxxx> wrote:
>> This patch is deliberately arranged to be easy to revert if/when alternatives
>> patching becomes NMI/#MC safe.
>>
>> For safety, there must be a dispatch serialising instruction in (what is
>> logically) DO_SPEC_CTRL_ENTRY so that, in the case that Xen needs IBRS set in
>> context, an attacker can't speculate around the WRMSR and reach an indirect
>> branch within the speculation window.
>>
>> Using conditionals opens this attack vector up, so the else clause gets an
>> LFENCE to force the pipeline to catch up before continuing.  This also covers
>> the safety of RSB conditional, as execution it is guaranteed to either hit 
>> the
>> WRMSR or LFENCE.
>>
>> One downside of not using alternatives is that there unconditionally an 
>> LFENCE
>> in the IST path in cases where we are not using the features from 
>> IBRS-capable
>> microcode.
>>
>> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
>> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
> Despite this yet another remark:
>
>> @@ -255,6 +260,69 @@
>>          DO_SPEC_CTRL_EXIT_TO_GUEST, X86_FEATURE_XEN_IBRS_SET,           \
>>          DO_SPEC_CTRL_EXIT_TO_GUEST, X86_FEATURE_XEN_IBRS_CLEAR
>>  
>> +/* TODO: Drop these when the alternatives infrastructure is NMI/#MC safe. */
>> +.macro SPEC_CTRL_ENTRY_FROM_INTR_IST
>> +/*
>> + * Requires %rsp=regs, %r14=stack_end
>> + * Clobbers %rax, %rcx, %rdx
>> + *
>> + * This is logical merge of DO_OVERWRITE_RSB and DO_SPEC_CTRL_ENTRY
>> + * maybexen=1, but with conditionals rather than alternatives.
>> + */
>> +    movzbl STACK_CPUINFO_FIELD(bti_ist_info)(%r14), %eax
>> +
>> +    testb $BTI_IST_RSB, %al
>> +    jz .L\@_skip_rsb
>> +
>> +    DO_OVERWRITE_RSB
>> +
>> +.L\@_skip_rsb:
>> +
>> +    testb $BTI_IST_WRMSR, %al
>> +    jz .L\@_skip_wrmsr
>> +
>> +    testb $3, UREGS_cs(%rsp)
>> +    jz .L\@_entry_from_xen
>> +
>> +    movb $0, STACK_CPUINFO_FIELD(use_shadow_spec_ctrl)(%r14)
> I take it you deliberately didn't want to use the same setz/and
> pair here to avoid at least the second branch here too, as we
> very much hope to only rarely hit this code path?

No - straight oversight.  I will fix up equivalently.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.