Messages in this thread | | | Date | Tue, 27 Mar 2018 14:07:03 +0100 | From | Darren Kenny <> | Subject | Re: [PATCH net V2] vhost: correctly remove wait queue during poll failure |
| |
On Tue, Mar 27, 2018 at 08:50:52PM +0800, Jason Wang wrote: >We tried to remove vq poll from wait queue, but do not check whether >or not it was in a list before. This will lead double free. Fixing >this by switching to use vhost_poll_stop() which zeros poll->wqh after >removing poll from waitqueue to make sure it won't be freed twice. > >Cc: Darren Kenny <darren.kenny@oracle.com> >Reported-by: syzbot+c0272972b01b872e604a@syzkaller.appspotmail.com >Fixes: 2b8b328b61c79 ("vhost_net: handle polling errors when setting backend") >Signed-off-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Darren Kenny <darren.kenny@oracle.com>
>--- >Changes from V1: >- tweak the commit log for to match the code >--- > drivers/vhost/vhost.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > >diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c >index 1b3e8d2d..5d5a9d9 100644 >--- a/drivers/vhost/vhost.c >+++ b/drivers/vhost/vhost.c >@@ -212,8 +212,7 @@ int vhost_poll_start(struct vhost_poll *poll, struct file *file) > if (mask) > vhost_poll_wakeup(&poll->wait, 0, 0, poll_to_key(mask)); > if (mask & EPOLLERR) { >- if (poll->wqh) >- remove_wait_queue(poll->wqh, &poll->wait); >+ vhost_poll_stop(poll); > ret = -EINVAL; > } > >-- >2.7.4 >
| |