From: Dan Carpenter Date: Wed, 30 Nov 2016 19:21:05 +0000 (+0300) Subject: KVM: use after free in kvm_ioctl_create_device() X-Git-Tag: v4.8.13~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6c69476139799ccf8d3e76edfc892c64ced80bc4;p=thirdparty%2Fkernel%2Fstable.git KVM: use after free in kvm_ioctl_create_device() commit a0f1d21c1ccb1da66629627a74059dd7f5ac9c61 upstream. We should move the ops->destroy(dev) after the list_del(&dev->vm_node) so that we don't use "dev" after freeing it. Fixes: a28ebea2adc4 ("KVM: Protect device ops->create and list_add with kvm->lock") Signed-off-by: Dan Carpenter Reviewed-by: David Hildenbrand Signed-off-by: Radim Krčmář Signed-off-by: Greg Kroah-Hartman --- diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 195078225aa5d..690d15eaee05f 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2852,10 +2852,10 @@ static int kvm_ioctl_create_device(struct kvm *kvm, ret = anon_inode_getfd(ops->name, &kvm_device_fops, dev, O_RDWR | O_CLOEXEC); if (ret < 0) { - ops->destroy(dev); mutex_lock(&kvm->lock); list_del(&dev->vm_node); mutex_unlock(&kvm->lock); + ops->destroy(dev); return ret; }