|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/3] x86/HVM: correct error code writing during task switch
>>> On 22.11.16 at 17:58, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 22/11/16 13:56, Jan Beulich wrote:
>> Whether to write 32 or just 16 bits depends on the D bit of the target
>> CS. The width of the stack pointer to use depends on the B bit of the
>> target SS.
>>
>> Also avoid using the no-fault copying routine.
>>
>> Finally avoid using yet another struct segment_register variable here.
>>
>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>>
>> --- a/xen/arch/x86/hvm/hvm.c
>> +++ b/xen/arch/x86/hvm/hvm.c
>> @@ -3033,9 +3033,6 @@ void hvm_task_switch(
>> goto out;
>> }
>>
>> - if ( (tss.trace & 1) && !exn_raised )
>> - hvm_inject_hw_exception(TRAP_debug, HVM_DELIVER_NO_ERROR_CODE);
>> -
>> tr.attr.fields.type = 0xb; /* busy 32-bit tss */
>> hvm_set_segment_register(v, x86_seg_tr, &tr);
>>
>> @@ -3051,17 +3048,32 @@ void hvm_task_switch(
>>
>> if ( errcode >= 0 )
>> {
>> - struct segment_register reg;
>> unsigned long linear_addr;
>> - regs->esp -= 4;
>> - hvm_get_segment_register(current, x86_seg_ss, ®);
>> - /* Todo: do not ignore access faults here. */
>> - if ( hvm_virtual_to_linear_addr(x86_seg_ss, ®, regs->esp,
>> - 4, hvm_access_write, 32,
>> + unsigned int opsz, sp;
>> +
>> + hvm_get_segment_register(current, x86_seg_cs, &segr);
>
> You already have current latched in v at this point.
Oh, right - I've blindly modified the old function invocation.
> Otherwise, Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Thanks, Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |