kvm: mmu: don't do memslot overflow check
PATCH v2 1/1 kvm: mmu: don't do memslot overflow check
As Andres pointed out:
| I don't understand the value of this check here. Are we looking for a | broken memslot? Shouldn't this be a BUG_ON? Is this the place to care | about these things? npages is capped to KVM_MEM_MAX_NR_PAGES, i.e. | 2^31. A 64 bit overflow would be caused by a gigantic gfn_start which | would be trouble in many other ways.
This patch drops the memslot overflow check to make the codes more simple.
Reviewed-by Andres Lagar-Cavilla <[email protected]>
Signed-off-by Wanpeng Li <[email protected]>
---
v1 -> v2:
* Fix Andres's name
* Add Andres's Reviewed-by
arch/x86/kvm/mmu.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-)
arch/x86/kvm/mmu.c +2 -10
@@ -4505,19 +4505,12 @@ void kvm_mmu_zap_collapsible_sptes(struct kvm *kvm,bool flush = false;unsigned long *rmapp;unsigned long last_index, index; -gfn_t gfn_start, gfn_end;spin_lock (&kvm->mmu_lock); - gfn_start = memslot->base_gfn; - gfn_end = memslot->base_gfn + memslot->npages -1 ; - -if (gfn_start >= gfn_end) - goto out; - rmapp = memslot->arch.rmap[0 ]; - last_index =gfn_to_index (gfn_end, memslot->base_gfn, -PT_PAGE_TABLE_LEVEL ); + last_index =gfn_to_index (memslot->base_gfn + memslot->npages -1 , + memslot->base_gfn,PT_PAGE_TABLE_LEVEL );for (index =0 ; index <= last_index; ++index, ++rmapp) {if (*rmapp)
@@ -4535,7 +4528,6 @@ void kvm_mmu_zap_collapsible_sptes(struct kvm *kvm,if (flush)kvm_flush_remote_tlbs (kvm); -out:spin_unlock (&kvm->mmu_lock); }
Signature · 1 line
1.9.1
Paolo Bonzini
maintainerQuoted 48 lines · Wanpeng Li
As Andres pointed out:
| I don't understand the value of this check here. Are we looking for a | broken memslot? Shouldn't this be a BUG_ON? Is this the place to care | about these things? npages is capped to KVM_MEM_MAX_NR_PAGES, i.e. | 2^31. A 64 bit overflow would be caused by a gigantic gfn_start which | would be trouble in many other ways.This patch drops the memslot overflow check to make the codes more simple.
Reviewed-by Andres Lagar-Cavilla <[email protected]>Signed-off-by Wanpeng Li <[email protected]>---
v1 -> v2:
* Fix Andres's name
* Add Andres's Reviewed-byarch/x86/kvm/mmu.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-)arch/x86/kvm/mmu.c +2
-9@@ -4505,19 +4505,12 @@ void kvm_mmu_zap_collapsible_sptes(struct kvm *kvm,bool flush = false;unsigned long *rmapp;unsigned long last_index, index; -gfn_t gfn_start, gfn_end;spin_lock (&kvm->mmu_lock); - gfn_start = memslot->base_gfn; - gfn_end = memslot->base_gfn + memslot->npages -1 ; - -if (gfn_start >= gfn_end) - goto out; - rmapp = memslot->arch.rmap[0 ]; - last_index =gfn_to_index (gfn_end, memslot->base_gfn, -PT_PAGE_TABLE_LEVEL ); + last_index =gfn_to_index (memslot->base_gfn + memslot->npages -1 , + memslot->base_gfn,PT_PAGE_TABLE_LEVEL );for (index =0 ; index <= last_index; ++index, ++rmapp) {if (*rmapp)
arch/x86/kvm/mmu.c void kvm_mmu_zap_collapsible_sptes(struct kvm *kvm, · line 4533
Quoted 7 lines
arch/x86/kvm/mmu.c +0
-1@@ -4535,7 +4528,6 @@ void kvm_mmu_zap_collapsible_sptes(struct kvm *kvm,if (flush)kvm_flush_remote_tlbs (kvm); -out:spin_unlock (&kvm->mmu_lock); }
Thanks, queued for 4.1.
Paolo