Skip to content

Commit 4cc7c1c

Browse files
Ian Campbelldavem330
authored andcommitted
xen/netback: free already allocated memory on failure in xen_netbk_get_requests
Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 7d5145d commit 4cc7c1c

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

drivers/net/xen-netback/netback.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ static struct gnttab_copy *xen_netbk_get_requests(struct xen_netbk *netbk,
978978
pending_idx = netbk->pending_ring[index];
979979
page = xen_netbk_alloc_page(netbk, skb, pending_idx);
980980
if (!page)
981-
return NULL;
981+
goto err;
982982

983983
gop->source.u.ref = txp->gref;
984984
gop->source.domid = vif->domid;
@@ -1000,6 +1000,17 @@ static struct gnttab_copy *xen_netbk_get_requests(struct xen_netbk *netbk,
10001000
}
10011001

10021002
return gop;
1003+
err:
1004+
/* Unwind, freeing all pages and sending error responses. */
1005+
while (i-- > start) {
1006+
xen_netbk_idx_release(netbk, frag_get_pending_idx(&frags[i]),
1007+
XEN_NETIF_RSP_ERROR);
1008+
}
1009+
/* The head too, if necessary. */
1010+
if (start)
1011+
xen_netbk_idx_release(netbk, pending_idx, XEN_NETIF_RSP_ERROR);
1012+
1013+
return NULL;
10031014
}
10041015

10051016
static int xen_netbk_tx_check_gop(struct xen_netbk *netbk,

0 commit comments

Comments
 (0)