Jan Beulich
2011-Jan-07 08:10 UTC
[Xen-devel] [PATCH] x86-64: don''t allow wrmsr to MSR_FAM10H_MMIO_CONF_BASE when Xen itself is using it
Signed-off-by: Jan Beulich <jbeulich@novell.com> --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1695,6 +1695,10 @@ static int is_cpufreq_controller(struct (d->domain_id == 0)); } +#ifdef CONFIG_X86_64 +#include "x86_64/mmconfig.h" +#endif + static int emulate_privileged_op(struct cpu_user_regs *regs) { struct vcpu *v = current; @@ -2289,7 +2293,14 @@ static int emulate_privileged_op(struct goto fail; if ( !IS_PRIV(v->domain) ) break; - if ( (rdmsr_safe(MSR_FAM10H_MMIO_CONF_BASE, val) != 0) || + if ( (rdmsr_safe(MSR_FAM10H_MMIO_CONF_BASE, val) != 0) ) + goto fail; + if ( +#ifdef CONFIG_X86_64 + (pci_probe & PCI_PROBE_MMCONF) && + (pci_probe & PCI_CHECK_ENABLE_AMD_MMCONF) ? + val != msr_content : +#endif ((val ^ msr_content) & ~( FAM10H_MMIO_CONF_ENABLE | (FAM10H_MMIO_CONF_BUSRANGE_MASK << _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2011-Jan-10 08:54 UTC
Re: [Xen-devel] [PATCH] x86-64: don''t allow wrmsr to MSR_FAM10H_MMIO_CONF_BASE when Xen itself is using it
Applied, thanks. Is similar needed in 4.0-testing? It doesn''t trivially backport since 4.0-testing does not have other of your patches which also serves to make variable pci_probe non-static. -- Keir On 07/01/2011 08:10, "Jan Beulich" <JBeulich@novell.com> wrote:> Signed-off-by: Jan Beulich <jbeulich@novell.com> > > --- a/xen/arch/x86/traps.c > +++ b/xen/arch/x86/traps.c > @@ -1695,6 +1695,10 @@ static int is_cpufreq_controller(struct > (d->domain_id == 0)); > } > > +#ifdef CONFIG_X86_64 > +#include "x86_64/mmconfig.h" > +#endif > + > static int emulate_privileged_op(struct cpu_user_regs *regs) > { > struct vcpu *v = current; > @@ -2289,7 +2293,14 @@ static int emulate_privileged_op(struct > goto fail; > if ( !IS_PRIV(v->domain) ) > break; > - if ( (rdmsr_safe(MSR_FAM10H_MMIO_CONF_BASE, val) != 0) || > + if ( (rdmsr_safe(MSR_FAM10H_MMIO_CONF_BASE, val) != 0) ) > + goto fail; > + if ( > +#ifdef CONFIG_X86_64 > + (pci_probe & PCI_PROBE_MMCONF) && > + (pci_probe & PCI_CHECK_ENABLE_AMD_MMCONF) ? > + val != msr_content : > +#endif > ((val ^ msr_content) & > ~( FAM10H_MMIO_CONF_ENABLE | > (FAM10H_MMIO_CONF_BUSRANGE_MASK << > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2011-Jan-10 09:07 UTC
Re: [Xen-devel] [PATCH] x86-64: don''t allow wrmsr to MSR_FAM10H_MMIO_CONF_BASE when Xen itself is using it
>>> On 10.01.11 at 09:54, Keir Fraser <keir@xen.org> wrote: > Applied, thanks. Is similar needed in 4.0-testing? It doesn''t trivially > backport since 4.0-testing does not have other of your patches which also > serves to make variable pci_probe non-static.We don''t have full support for PCI_CHECK_ENABLE_AMD_MMCONF in 4.0 anyway, so this not clear whether there would be much benefit from the change here. However, as you mention it and I now think about it from a slightly different perspective - perhaps having the (pci_probe & PCI_CHECK_ENABLE_AMD_MMCONF) check in here isn''t correct at all - we really only should check whether we''re using mmconf. From that angle, having this in 4.0 would certainly be desirable, as otherwise the mmconf window could move under our feet. Yet again when mmconf is enabled (FAM10H_MMIO_CONF_ENABL set) no version of Linux wouldn''t move the window either, so the change would only be a theoretical safe guard. Hence altogether probably not worth the effort for 4.0, the more that the whole thing still isn''t complete, as the E820 interaction hasn''t seen a decision so far (neither on the Linux side). Jan> On 07/01/2011 08:10, "Jan Beulich" <JBeulich@novell.com> wrote: > >> Signed-off-by: Jan Beulich <jbeulich@novell.com> >> >> --- a/xen/arch/x86/traps.c >> +++ b/xen/arch/x86/traps.c >> @@ -1695,6 +1695,10 @@ static int is_cpufreq_controller(struct >> (d->domain_id == 0)); >> } >> >> +#ifdef CONFIG_X86_64 >> +#include "x86_64/mmconfig.h" >> +#endif >> + >> static int emulate_privileged_op(struct cpu_user_regs *regs) >> { >> struct vcpu *v = current; >> @@ -2289,7 +2293,14 @@ static int emulate_privileged_op(struct >> goto fail; >> if ( !IS_PRIV(v->domain) ) >> break; >> - if ( (rdmsr_safe(MSR_FAM10H_MMIO_CONF_BASE, val) != 0) || >> + if ( (rdmsr_safe(MSR_FAM10H_MMIO_CONF_BASE, val) != 0) ) >> + goto fail; >> + if ( >> +#ifdef CONFIG_X86_64 >> + (pci_probe & PCI_PROBE_MMCONF) && >> + (pci_probe & PCI_CHECK_ENABLE_AMD_MMCONF) ? >> + val != msr_content : >> +#endif >> ((val ^ msr_content) & >> ~( FAM10H_MMIO_CONF_ENABLE | >> (FAM10H_MMIO_CONF_BUSRANGE_MASK << >> >> >> >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@lists.xensource.com >> http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel