|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH v2 for-4.5] x86/hvm: Further restrict access to x2apic MSRs
On Fri, Oct 17, 2014 at 8:11 AM, Andrew Cooper
<andrew.cooper3@xxxxxxxxxx> wrote:
> On 17/10/14 16:08, Jan Beulich wrote:
>>>>> On 17.10.14 at 16:49, <andrew.cooper3@xxxxxxxxxx> wrote:
>>> The x2apic specification reserves the entire MSR range 0x800-0xbff, while
>>> only
>>> the first 0x3f MSRs have defined purposes. All reserved MSRs in this region
>>> are architecturally required to raise #GP faults upon access.
>>>
>>> Xen used to pass this entire range to hvm_x2apic_msr_{read,write}(), but the
>>> range was restricted somewhat by XSA-108 (c/s 61fdda7ac) to prevent guests
>>> being able to read pages adjacent to the domheap page backing the
>>> vlapic->regs
>>> array.
>>>
>>> While removing the vulnerability, a side effect of XSA-108 was that the MSR
>>> range 0x900-0xbff fell through the switch statement and ends up reading the
>>> hosts x2apic range. This behaviour is a problem in general, but specifically
>>> it turns out that MSRs 0xa00 and 0xa01 are implemented (but undocumented) on
>> 0xa00..0xa02
>>
>>> certain SandyBridge and IvyBridge systems.
>>>
>>> Experimentally, no operating system in XenServer's test suite (including all
>>> versions of Windows currently supported by Microsoft) ever peek at these
>>> MSRs,
>>> even on hosts where some of them are implemented.
>>>
>>> This patch undoes the patch to XSA-108, returning the primary bounds check
>>> to
>> "undoes the patch to XSA-108"?
>
> I will reword
>
>>
>>> the entire specified range. It changes hvm_x2apic_msr_read() to a whitelist
>>> approach, which avoids the vulnerability, and provides a more
>>> architecturally
>>> accurate emulation of the reserved MSRs (which would previously read as 0
>>> rather than fault).
>> Mention that hvm_x2apic_msr_write() already uses a white list
>> approach and hence doesn't need changing?
>
> And will add this in as well.
>
>>
>>> This is RFC because I have not yet functionally tested it, and I would
>>> appreciate feedback on the approach.
>> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
>> with one minor change suggestion:
>>
>>> --- a/xen/arch/x86/hvm/vlapic.c
>>> +++ b/xen/arch/x86/hvm/vlapic.c
>>> @@ -649,19 +649,38 @@ int hvm_x2apic_msr_read(struct vcpu *v, unsigned int
>>> msr, uint64_t *msr_content)
>>> if ( !vlapic_x2apic_mode(vlapic) )
>>> return X86EMUL_UNHANDLEABLE;
>>>
>>> - vlapic_read_aligned(vlapic, offset, &low);
>>> switch ( offset )
>>> {
>>> case APIC_ICR:
>>> vlapic_read_aligned(vlapic, APIC_ICR2, &high);
>>> + /* Fallthrough. */
>>> + case APIC_ID:
>>> + case APIC_LVR:
>>> + case APIC_TASKPRI:
>>> + case APIC_PROCPRI:
>>> + case APIC_LDR:
>>> + case APIC_SPIV:
>>> + case APIC_ISR ... APIC_ISR + 0x70:
>>> + case APIC_TMR ... APIC_TMR + 0x70:
>>> + case APIC_IRR ... APIC_IRR + 0x70:
>>> + case APIC_ESR:
>>> + case APIC_CMCI:
>>> + case APIC_LVTT:
>>> + case APIC_LVTTHMR:
>>> + case APIC_LVTPC:
>>> + case APIC_LVT0:
>>> + case APIC_LVT1:
>>> + case APIC_LVTERR:
>>> + case APIC_TMICT:
>>> + case APIC_TMCCT:
>>> + case APIC_TDCR:
>>> break;
>>>
>>> - case APIC_EOI:
>>> - case APIC_ICR2:
>>> - case APIC_SELF_IPI:
>>> + default:
>>> return X86EMUL_UNHANDLEABLE;
>>> }
>>>
>>> + vlapic_read_aligned(vlapic, offset, &low);
>> If you move this up into the switch statement, the compiler will have
>> a chance to warn about "low" being uninitialized for any unintentional
>> (future) code path falling out through the bottom of the switch
>> statement. But I'm not insisting on it - if you decide to keep it the
>> way is it, the R-b stands anyway.
>
> I will move it in, and repost once XenRT has finished validating the fix.
>
> ~Andrew
Assuming that the update reflecting the above be made,
Acked-by: Jun Nakajima <jun.nakajima@xxxxxxxxx>
--
Jun
Intel Open Source Technology Center
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |