From 84f8f3dace8c6e88b1afa828f9abe1e9a57fac1a Mon Sep 17 00:00:00 2001 From: Gonglei Date: Sun, 2 Nov 2014 13:37:17 +0800 Subject: [PATCH] tap: fix possible fd leak in net_init_tap In hotplugging scenario, taking those true branch, the file handler do not be closed. Let's close them before return. Signed-off-by: Gonglei Signed-off-by: Michael Tokarev --- net/tap.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/tap.c b/net/tap.c index 7bcd4c73ea..bde6b58b17 100644 --- a/net/tap.c +++ b/net/tap.c @@ -796,6 +796,7 @@ int net_init_tap(const NetClientOptions *opts, const char *name, if (net_init_tap_one(tap, peer, "bridge", name, ifname, script, downscript, vhostfdname, vnet_hdr, fd)) { + close(fd); return -1; } } else { @@ -823,6 +824,7 @@ int net_init_tap(const NetClientOptions *opts, const char *name, if (queues > 1 && i == 0 && !tap->has_ifname) { if (tap_fd_get_ifname(fd, ifname)) { error_report("Fail to get ifname"); + close(fd); return -1; } } @@ -831,6 +833,7 @@ int net_init_tap(const NetClientOptions *opts, const char *name, i >= 1 ? "no" : script, i >= 1 ? "no" : downscript, vhostfdname, vnet_hdr, fd)) { + close(fd); return -1; } }