hw/net/xen_nic.c: Free 'netdev->txs' when map 'netdev->rxs' fails
authorChen Gang <gang.chen.5i5j@gmail.com>
Tue, 16 Dec 2014 20:48:54 +0000 (04:48 +0800)
committerStefan Hajnoczi <stefanha@redhat.com>
Mon, 12 Jan 2015 10:16:23 +0000 (10:16 +0000)
When map 'netdev->rxs' fails, need free the original resource, or will
cause resource leak.

Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
hw/net/xen_nic.c

index 63918ae1a0e2c006bb69eb3b765cbc8fca4d6a70..7a57feb29bb1a1efb7354a14fed65e6da78c0462 100644 (file)
@@ -370,11 +370,16 @@ static int net_connect(struct XenDevice *xendev)
                                           netdev->xendev.dom,
                                           netdev->tx_ring_ref,
                                           PROT_READ | PROT_WRITE);
+    if (!netdev->txs) {
+        return -1;
+    }
     netdev->rxs = xc_gnttab_map_grant_ref(netdev->xendev.gnttabdev,
                                           netdev->xendev.dom,
                                           netdev->rx_ring_ref,
                                           PROT_READ | PROT_WRITE);
-    if (!netdev->txs || !netdev->rxs) {
+    if (!netdev->rxs) {
+        xc_gnttab_munmap(netdev->xendev.gnttabdev, netdev->txs, 1);
+        netdev->txs = NULL;
         return -1;
     }
     BACK_RING_INIT(&netdev->tx_ring, netdev->txs, XC_PAGE_SIZE);