diff mbox

tap: fix memory leak on failure in net_init_tap()

Message ID 1484076114-5594-1-git-send-email-peter.maydell@linaro.org
State Accepted
Commit fac7d7b1cdb21f921d7ac396365f5e920ef03096
Headers show

Commit Message

Peter Maydell Jan. 10, 2017, 7:21 p.m. UTC
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>

---
 net/tap.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

-- 
2.7.4

Comments

Jason Wang Jan. 11, 2017, 3:08 a.m. UTC | #1
On 2017年01月11日 03:21, Peter Maydell wrote:
> 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>

> ---

>   net/tap.c | 7 +++++--

>   1 file changed, 5 insertions(+), 2 deletions(-)

>

> diff --git a/net/tap.c b/net/tap.c

> index b6896a7..6248e85 100644

> --- a/net/tap.c

> +++ b/net/tap.c

> @@ -788,8 +788,8 @@ int net_init_tap(const Netdev *netdev, const char *name,

>               return -1;

>           }

>       } else if (tap->has_fds) {

> -        char **fds = g_new0(char *, MAX_TAP_QUEUES);

> -        char **vhost_fds = g_new0(char *, MAX_TAP_QUEUES);

> +        char **fds;

> +        char **vhost_fds;

>           int nfds, nvhosts;

>   

>           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;

>           }

>   

> +        fds = g_new0(char *, MAX_TAP_QUEUES);

> +        vhost_fds = g_new0(char *, MAX_TAP_QUEUES);

> +

>           nfds = get_fds(tap->fds, fds, MAX_TAP_QUEUES);

>           if (tap->has_vhostfds) {

>               nvhosts = get_fds(tap->vhostfds, vhost_fds, MAX_TAP_QUEUES);


Applied to -net.

Thanks
diff mbox

Patch

diff --git a/net/tap.c b/net/tap.c
index b6896a7..6248e85 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -788,8 +788,8 @@  int net_init_tap(const Netdev *netdev, const char *name,
             return -1;
         }
     } else if (tap->has_fds) {
-        char **fds = g_new0(char *, MAX_TAP_QUEUES);
-        char **vhost_fds = g_new0(char *, MAX_TAP_QUEUES);
+        char **fds;
+        char **vhost_fds;
         int nfds, nvhosts;
 
         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;
         }
 
+        fds = g_new0(char *, MAX_TAP_QUEUES);
+        vhost_fds = g_new0(char *, MAX_TAP_QUEUES);
+
         nfds = get_fds(tap->fds, fds, MAX_TAP_QUEUES);
         if (tap->has_vhostfds) {
             nvhosts = get_fds(tap->vhostfds, vhost_fds, MAX_TAP_QUEUES);