Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm

Pull kvm fixes from Paolo Bonzini:
"Three small fixes.

Two for x86 and one avoids that sparse bails out"

* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
KVM: x86: SYSENTER emulation is broken
KVM: x86: Fix of previously incomplete fix for CVE-2014-8480
KVM: fix sparse warning in include/trace/events/kvm.h

+19 -28
+10 -21
arch/x86/kvm/emulate.c
··· 2348 2348 * Not recognized on AMD in compat mode (but is recognized in legacy 2349 2349 * mode). 2350 2350 */ 2351 - if ((ctxt->mode == X86EMUL_MODE_PROT32) && (efer & EFER_LMA) 2351 + if ((ctxt->mode != X86EMUL_MODE_PROT64) && (efer & EFER_LMA) 2352 2352 && !vendor_intel(ctxt)) 2353 2353 return emulate_ud(ctxt); 2354 2354 ··· 2359 2359 setup_syscalls_segments(ctxt, &cs, &ss); 2360 2360 2361 2361 ops->get_msr(ctxt, MSR_IA32_SYSENTER_CS, &msr_data); 2362 - switch (ctxt->mode) { 2363 - case X86EMUL_MODE_PROT32: 2364 - if ((msr_data & 0xfffc) == 0x0) 2365 - return emulate_gp(ctxt, 0); 2366 - break; 2367 - case X86EMUL_MODE_PROT64: 2368 - if (msr_data == 0x0) 2369 - return emulate_gp(ctxt, 0); 2370 - break; 2371 - default: 2372 - break; 2373 - } 2362 + if ((msr_data & 0xfffc) == 0x0) 2363 + return emulate_gp(ctxt, 0); 2374 2364 2375 2365 ctxt->eflags &= ~(EFLG_VM | EFLG_IF); 2376 - cs_sel = (u16)msr_data; 2377 - cs_sel &= ~SELECTOR_RPL_MASK; 2366 + cs_sel = (u16)msr_data & ~SELECTOR_RPL_MASK; 2378 2367 ss_sel = cs_sel + 8; 2379 - ss_sel &= ~SELECTOR_RPL_MASK; 2380 - if (ctxt->mode == X86EMUL_MODE_PROT64 || (efer & EFER_LMA)) { 2368 + if (efer & EFER_LMA) { 2381 2369 cs.d = 0; 2382 2370 cs.l = 1; 2383 2371 } ··· 2374 2386 ops->set_segment(ctxt, ss_sel, &ss, 0, VCPU_SREG_SS); 2375 2387 2376 2388 ops->get_msr(ctxt, MSR_IA32_SYSENTER_EIP, &msr_data); 2377 - ctxt->_eip = msr_data; 2389 + ctxt->_eip = (efer & EFER_LMA) ? msr_data : (u32)msr_data; 2378 2390 2379 2391 ops->get_msr(ctxt, MSR_IA32_SYSENTER_ESP, &msr_data); 2380 - *reg_write(ctxt, VCPU_REGS_RSP) = msr_data; 2392 + *reg_write(ctxt, VCPU_REGS_RSP) = (efer & EFER_LMA) ? msr_data : 2393 + (u32)msr_data; 2381 2394 2382 2395 return X86EMUL_CONTINUE; 2383 2396 } ··· 3780 3791 }; 3781 3792 3782 3793 static const struct opcode group6[] = { 3783 - DI(Prot, sldt), 3784 - DI(Prot, str), 3794 + DI(Prot | DstMem, sldt), 3795 + DI(Prot | DstMem, str), 3785 3796 II(Prot | Priv | SrcMem16, em_lldt, lldt), 3786 3797 II(Prot | Priv | SrcMem16, em_ltr, ltr), 3787 3798 N, N, N, N,
+9 -7
include/trace/events/kvm.h
··· 146 146 147 147 #if defined(CONFIG_HAVE_KVM_IRQFD) 148 148 149 + #ifdef kvm_irqchips 150 + #define kvm_ack_irq_string "irqchip %s pin %u" 151 + #define kvm_ack_irq_parm __print_symbolic(__entry->irqchip, kvm_irqchips), __entry->pin 152 + #else 153 + #define kvm_ack_irq_string "irqchip %d pin %u" 154 + #define kvm_ack_irq_parm __entry->irqchip, __entry->pin 155 + #endif 156 + 149 157 TRACE_EVENT(kvm_ack_irq, 150 158 TP_PROTO(unsigned int irqchip, unsigned int pin), 151 159 TP_ARGS(irqchip, pin), ··· 168 160 __entry->pin = pin; 169 161 ), 170 162 171 - #ifdef kvm_irqchips 172 - TP_printk("irqchip %s pin %u", 173 - __print_symbolic(__entry->irqchip, kvm_irqchips), 174 - __entry->pin) 175 - #else 176 - TP_printk("irqchip %d pin %u", __entry->irqchip, __entry->pin) 177 - #endif 163 + TP_printk(kvm_ack_irq_string, kvm_ack_irq_parm) 178 164 ); 179 165 180 166 #endif /* defined(CONFIG_HAVE_KVM_IRQFD) */