From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Carpenter Subject: [patch] KVM: use after free in kvm_ioctl_create_device() Date: Wed, 30 Nov 2016 22:21:05 +0300 Message-ID: <20161130192105.GC28180@mwanda> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Radim =?utf-8?B?S3LEjW3DocWZ?= , kvm@vger.kernel.org, kernel-janitors@vger.kernel.org To: Paolo Bonzini , Christoffer Dall Return-path: Content-Disposition: inline Sender: kernel-janitors-owner@vger.kernel.org List-Id: kvm.vger.kernel.org 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 diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 69a1247..de102ca 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -2899,10 +2899,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; }