Fix NULL dereference in gfn_to_hva_prot()
PATCH 1/1 Fix NULL dereference in gfn_to_hva_prot()
gfn_to_memslot() can return NULL or invalid slot. We need to check slot validity before accessing it.
Signed-off-by Gleb Natapov <[email protected]>
virt/kvm/kvm_main.c +4 -2
@@ -1064,10 +1064,12 @@ EXPORT_SYMBOL_GPL(gfn_to_hva);unsigned long gfn_to_hva_prot (struct kvm *kvm,gfn_t gfn,bool *writable) {struct kvm_memory_slot *slot =gfn_to_memslot (kvm, gfn); -if (writable) +unsigned long hva =__gfn_to_hva_many (slot, gfn,NULL , false); + +if (!kvm_is_error_hva (hva) && writable) *writable = !memslot_is_readonly (slot); -return __gfn_to_hva_many (gfn_to_memslot (kvm, gfn), gfn,NULL , false); +return hva; }static int kvm_read_hva (void *data,void __user *hva,int len)
--
Gleb.
Il 01/10/2013 18:58, Gleb Natapov ha scritto:
Quoted 24 lines
gfn_to_memslot()can return NULL or invalid slot. We need to check slot validity before accessing it.Signed-off-by Gleb Natapov <[email protected]>virt/kvm/kvm_main.c +4
-3@@ -1064,10 +1064,12 @@ EXPORT_SYMBOL_GPL(gfn_to_hva);unsigned long gfn_to_hva_prot (struct kvm *kvm,gfn_t gfn,bool *writable) {struct kvm_memory_slot *slot =gfn_to_memslot (kvm, gfn); -if (writable) +unsigned long hva =__gfn_to_hva_many (slot, gfn,NULL , false); + +if (!kvm_is_error_hva (hva) && writable) *writable = !memslot_is_readonly (slot); -return __gfn_to_hva_many (gfn_to_memslot (kvm, gfn), gfn,NULL , false); +return hva; }static int kvm_read_hva (void *data,void __user *hva,int len) --
Quoted 2 lines
Gleb.
Reviewed-by Paolo Bonzini <[email protected]>