[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <3d02b8f5-0a6b-e8d1-533d-8503da3fcc4e@redhat.com>
Date: Mon, 5 Jul 2021 11:48:36 +0800
From: Jason Wang <jasowang@...hat.com>
To: gautam.dawar@...inx.com
Cc: martinh@...inx.com, hanand@...inx.com, gdawar@...inx.com,
"Michael S. Tsirkin" <mst@...hat.com>, kvm@...r.kernel.org,
virtualization@...ts.linux-foundation.org, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH] vhost-vdpa: mark vhost device invalid to reflect vdpa
device unregistration
在 2021/7/5 上午4:52, gautam.dawar@...inx.com 写道:
> vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
> @@ -1091,11 +1122,13 @@ static void vhost_vdpa_remove(struct vdpa_device *vdpa)
> opened = atomic_cmpxchg(&v->opened, 0, 1);
> if (!opened)
> break;
> - wait_for_completion_timeout(&v->completion,
> - msecs_to_jiffies(1000));
> - dev_warn_once(&v->dev,
> - "%s waiting for/dev/%s to be closed\n",
> - __func__, dev_name(&v->dev));
> + if (!wait_for_completion_timeout(&v->completion,
> + msecs_to_jiffies(1000))) {
> + dev_warn(&v->dev,
> + "%s/dev/%s in use, continue..\n",
> + __func__, dev_name(&v->dev));
> + break;
> + }
> } while (1);
>
> put_device(&v->dev);
> + v->dev_invalid = true;
Besides the mapping handling mentioned by Michael. I think this can lead
use-after-free. put_device may release the memory.
Another fundamental issue, vDPA is the parent of vhost-vDPA device. I'm
not sure the device core can allow the parent to go away first.
Thanks
Powered by blists - more mailing lists