tap: fix memory leak on failure in net_init_tap()

Commit 091a6b2ac fixed most of the memory leaks in failure
paths in net_init_tap() reported by Coverity (CID 1356216),
but missed one. Fix it by deferring the allocation of
fds and vhost_fds until after the error check.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
Peter Maydell 2017-01-10 19:21:54 +00:00 committed by Jason Wang
parent a023b7ac62
commit fac7d7b1cd

View File

@ -788,8 +788,8 @@ int net_init_tap(const Netdev *netdev, const char *name,
return -1; return -1;
} }
} else if (tap->has_fds) { } else if (tap->has_fds) {
char **fds = g_new0(char *, MAX_TAP_QUEUES); char **fds;
char **vhost_fds = g_new0(char *, MAX_TAP_QUEUES); char **vhost_fds;
int nfds, nvhosts; int nfds, nvhosts;
if (tap->has_ifname || tap->has_script || tap->has_downscript || if (tap->has_ifname || tap->has_script || tap->has_downscript ||
@ -801,6 +801,9 @@ int net_init_tap(const Netdev *netdev, const char *name,
return -1; return -1;
} }
fds = g_new0(char *, MAX_TAP_QUEUES);
vhost_fds = g_new0(char *, MAX_TAP_QUEUES);
nfds = get_fds(tap->fds, fds, MAX_TAP_QUEUES); nfds = get_fds(tap->fds, fds, MAX_TAP_QUEUES);
if (tap->has_vhostfds) { if (tap->has_vhostfds) {
nvhosts = get_fds(tap->vhostfds, vhost_fds, MAX_TAP_QUEUES); nvhosts = get_fds(tap->vhostfds, vhost_fds, MAX_TAP_QUEUES);