KVM fixes for 5.0-rc2
Minor fixes for new code, corner cases, and documentation. Patches are isolated and sufficiently described by the shortlog. -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEj/xJEkTHTJzZE/FJQP/qGw8qh+gFAlw52x0ACgkQQP/qGw8q h+iejgf+NjD3jXCYAxLtGInXyQEwqw113Gr8941oC2E50CifTqrFhWNkRgl+GyCS x92SCiNS1xpy+SnUZDj63MjsB90zOOogPG+RYsSE+BAN/i/9IiE2F5aYSXlen0rR SOOfraQTDlS5rOp9auGMNlNWkmEKCO6YEsdmlNte/QVNuy4vrHfAJDvdfCUiC0qO XJWMjIyZElsKJUtmZzKuTrCZniBvqn6yGH+/0kggrzDPPIHU+M7qSkMkAC7wqrFy 0zaeKNloArFLKlDQPQ3AykgxCrp6CJnXuR/Oo6R5rn9jF2kVdlzglx7pHBAc5OGp wI+VDWRA2x2JevWcIdsN2Xp2vaCRGw== =L1zP -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm Pull KVM fixes from Radim Krčmář: "Minor fixes for new code, corner cases, and documentation" * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: x86/kvm/nVMX: don't skip emulated instruction twice when vmptr address is not backed Documentation/virtual/kvm: Update URL for AMD SEV API specification KVM/VMX: Avoid return error when flush tlb successfully in the hv_remote_flush_tlb_with_range() kvm: sev: Fail KVM_SEV_INIT if already initialized KVM: validate userspace input in kvm_clear_dirty_log_protect() KVM: x86: Fix bit shifting in update_intel_pt_cfg
This commit is contained in:
Коммит
473348891c
|
@ -242,6 +242,6 @@ References
|
|||
==========
|
||||
|
||||
.. [white-paper] http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/12/AMD_Memory_Encryption_Whitepaper_v7-Public.pdf
|
||||
.. [api-spec] http://support.amd.com/TechDocs/55766_SEV-KM%20API_Specification.pdf
|
||||
.. [api-spec] http://support.amd.com/TechDocs/55766_SEV-KM_API_Specification.pdf
|
||||
.. [amd-apm] http://support.amd.com/TechDocs/24593.pdf (section 15.34)
|
||||
.. [kvm-forum] http://www.linux-kvm.org/images/7/74/02x08A-Thomas_Lendacky-AMDs_Virtualizatoin_Memory_Encryption_Technology.pdf
|
||||
|
|
|
@ -6278,6 +6278,9 @@ static int sev_guest_init(struct kvm *kvm, struct kvm_sev_cmd *argp)
|
|||
int asid, ret;
|
||||
|
||||
ret = -EBUSY;
|
||||
if (unlikely(sev->active))
|
||||
return ret;
|
||||
|
||||
asid = sev_asid_new();
|
||||
if (asid < 0)
|
||||
return ret;
|
||||
|
|
|
@ -4540,9 +4540,8 @@ static int handle_vmptrld(struct kvm_vcpu *vcpu)
|
|||
* given physical address won't match the required
|
||||
* VMCS12_REVISION identifier.
|
||||
*/
|
||||
nested_vmx_failValid(vcpu,
|
||||
return nested_vmx_failValid(vcpu,
|
||||
VMXERR_VMPTRLD_INCORRECT_VMCS_REVISION_ID);
|
||||
return kvm_skip_emulated_instruction(vcpu);
|
||||
}
|
||||
new_vmcs12 = kmap(page);
|
||||
if (new_vmcs12->hdr.revision_id != VMCS12_REVISION ||
|
||||
|
|
|
@ -453,7 +453,7 @@ static int hv_remote_flush_tlb_with_range(struct kvm *kvm,
|
|||
struct kvm_tlb_range *range)
|
||||
{
|
||||
struct kvm_vcpu *vcpu;
|
||||
int ret = -ENOTSUPP, i;
|
||||
int ret = 0, i;
|
||||
|
||||
spin_lock(&to_kvm_vmx(kvm)->ept_pointer_lock);
|
||||
|
||||
|
@ -7044,7 +7044,7 @@ static void update_intel_pt_cfg(struct kvm_vcpu *vcpu)
|
|||
|
||||
/* unmask address range configure area */
|
||||
for (i = 0; i < vmx->pt_desc.addr_range; i++)
|
||||
vmx->pt_desc.ctl_bitmask &= ~(0xf << (32 + i * 4));
|
||||
vmx->pt_desc.ctl_bitmask &= ~(0xfULL << (32 + i * 4));
|
||||
}
|
||||
|
||||
static void vmx_cpuid_update(struct kvm_vcpu *vcpu)
|
||||
|
|
|
@ -1227,9 +1227,9 @@ int kvm_clear_dirty_log_protect(struct kvm *kvm,
|
|||
{
|
||||
struct kvm_memslots *slots;
|
||||
struct kvm_memory_slot *memslot;
|
||||
int as_id, id, n;
|
||||
int as_id, id;
|
||||
gfn_t offset;
|
||||
unsigned long i;
|
||||
unsigned long i, n;
|
||||
unsigned long *dirty_bitmap;
|
||||
unsigned long *dirty_bitmap_buffer;
|
||||
|
||||
|
@ -1249,6 +1249,11 @@ int kvm_clear_dirty_log_protect(struct kvm *kvm,
|
|||
return -ENOENT;
|
||||
|
||||
n = kvm_dirty_bitmap_bytes(memslot);
|
||||
|
||||
if (log->first_page > memslot->npages ||
|
||||
log->num_pages > memslot->npages - log->first_page)
|
||||
return -EINVAL;
|
||||
|
||||
*flush = false;
|
||||
dirty_bitmap_buffer = kvm_second_dirty_bitmap(memslot);
|
||||
if (copy_from_user(dirty_bitmap_buffer, log->dirty_bitmap, n))
|
||||
|
|
Загрузка…
Ссылка в новой задаче