|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 6/6] x86/msr: Blacklist various MSRs which guests definitely shouldn't be using
On Mon, Feb 26, 2018 at 05:35:19PM +0000, Andrew Cooper wrote:
> The main purpose is to blacklist the Intel Resource Director Technology MSRs.
> We do not yet virtualise support for guests, but Linux has been observed to
> probe for these MSRs without checking CPUID first.
>
> The architecturally inaccessable ranges don't need to fall back into the
> legacy ranges, because they are not going to eventually evaluate as
> accessible.
>
> The Silicon Debug interface will probably never be virtualised for guests, but
> doesn't want to leak through from real hardware. SGX isn't yet virtualised,
> but likely will be in the future.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Wei Liu <wei.liu2@xxxxxxxxxx>
> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> CC: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx>
> ---
> xen/arch/x86/msr.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/xen/arch/x86/msr.c b/xen/arch/x86/msr.c
> index 3cb4158..0237637 100644
> --- a/xen/arch/x86/msr.c
> +++ b/xen/arch/x86/msr.c
> @@ -158,6 +158,10 @@ int guest_rdmsr(const struct vcpu *v, uint32_t msr,
> uint64_t *val)
> *val = vp->spec_ctrl.raw;
> break;
>
> + case 0x8c ... 0x8f: /* SGX Launch Enclave Public Key Hash. */
> + /* Not implemented yet. */
> + goto gp_fault;
> +
> case MSR_INTEL_PLATFORM_INFO:
> if ( !dp->plaform_info.available )
> goto gp_fault;
> @@ -183,6 +187,15 @@ int guest_rdmsr(const struct vcpu *v, uint32_t msr,
> uint64_t *val)
> ret = guest_rdmsr_x2apic(v, msr, val);
> goto out;
>
> + case 0xc80:
> + /* Silicon Debug Inferface not advertised to guests. */
> + goto gp_fault;
> +
> + case 0xc81 ... 0xc8f: /* Misc RDT MSRs. */
> + case 0xc90 ... 0xd8f: /* CAT Mask registers. */
> + /* Not implemented yet. */
> + goto gp_fault;
You have sorted them by index, I would maybe group them together in
order to use a single goto.
I would however prefer to have defines for those values.
> +
> case 0x40000000 ... 0x400001ff:
> if ( is_viridian_domain(d) )
> {
> @@ -196,6 +209,15 @@ int guest_rdmsr(const struct vcpu *v, uint32_t msr,
> uint64_t *val)
> goto out;
>
> default:
> + /*
> + * Blacklist the architecturally inaccessable MSRs. No point
> wandering
> + * the legacy handlers.
> + */
> + if ( msr > 0x1fff &&
> + (msr < 0xc0000000 || msr > 0xc0001fff) &&
> + (msr < 0xc0010000 || msr > 0xc0011fff) )
Maybe this could be a macro in order to avoid duplication with the
chunk in wrmsr? (MSR_INACCESSIBLE or some such).
Thanks, Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |