Fix the leaking of oldubufs and fd refcnt when fail to initialized used ring.

Signed-off-by: Jason Wang <jasow...@redhat.com>
---
 drivers/vhost/net.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index ebd08b2..629d6b5 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -834,8 +834,10 @@ static long vhost_net_set_backend(struct vhost_net *n, 
unsigned index, int fd)
                vhost_net_enable_vq(n, vq);
 
                r = vhost_init_used(vq);
-               if (r)
-                       goto err_vq;
+               if (r) {
+                       sock = NULL;
+                       goto err_used;
+               }
 
                n->tx_packets = 0;
                n->tx_zcopy_err = 0;
@@ -859,8 +861,14 @@ static long vhost_net_set_backend(struct vhost_net *n, 
unsigned index, int fd)
        mutex_unlock(&n->dev.mutex);
        return 0;
 
+err_used:
+       if (oldubufs)
+               vhost_ubuf_put_and_wait(oldubufs);
+       if (oldsock)
+               fput(oldsock->file);
 err_ubufs:
-       fput(sock->file);
+       if (sock)
+               fput(sock->file);
 err_vq:
        mutex_unlock(&vq->mutex);
 err:
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to