On Wed, 13 Dec 2017, Vitaly Kuznetsov wrote: > In hyperv_init() we presume we always have access to VP index and hypercall > MSRs while according to the specification we should check if we're allowed > to access the corresponding MSRs before accessing them. > > Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> Reviewed-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > --- > arch/x86/hyperv/hv_init.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c > index 189a398290db..21f9d53d9f00 100644 > --- a/arch/x86/hyperv/hv_init.c > +++ b/arch/x86/hyperv/hv_init.c > @@ -110,12 +110,19 @@ static int hv_cpu_init(unsigned int cpu) > */ > void hyperv_init(void) > { > - u64 guest_id; > + u64 guest_id, required_msrs; > union hv_x64_msr_hypercall_contents hypercall_msr; > > if (x86_hyper_type != X86_HYPER_MS_HYPERV) > return; > > + /* Absolutely required MSRs */ > + required_msrs = HV_X64_MSR_HYPERCALL_AVAILABLE | > + HV_X64_MSR_VP_INDEX_AVAILABLE; > + > + if ((ms_hyperv.features & required_msrs) != required_msrs) > + return; > + > /* Allocate percpu VP index */ > hv_vp_index = kmalloc_array(num_possible_cpus(), sizeof(*hv_vp_index), > GFP_KERNEL); > -- > 2.14.3 > >