qemu-trivial
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-trivial] [PATCH 2/2] tap: fix possible fd leak


From: Michael Tokarev
Subject: Re: [Qemu-trivial] [PATCH 2/2] tap: fix possible fd leak
Date: Sun, 02 Nov 2014 08:11:02 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.2.0

31.10.2014 09:11, address@hidden wrote:
> From: Gonglei <address@hidden>
> 
> In hotplugging scenario, taking those true branch, the file
> handler do not be closed. Adding cleanup logic for them.
> 
> Signed-off-by: Gonglei <address@hidden>
> ---
>  net/tap.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/net/tap.c b/net/tap.c
> index 7bcd4c7..3cfbee8 100644
> --- a/net/tap.c
> +++ b/net/tap.c
> @@ -796,7 +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)) {
> -            return -1;
> +            goto fail;
>          }
>      } else {
>          if (tap->has_vhostfds) {
> @@ -823,7 +823,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");
> -                    return -1;
> +                    goto fail;
>                  }
>              }
>  
> @@ -831,12 +831,18 @@ int net_init_tap(const NetClientOptions *opts, const 
> char *name,
>                                   i >= 1 ? "no" : script,
>                                   i >= 1 ? "no" : downscript,
>                                   vhostfdname, vnet_hdr, fd)) {
> -                return -1;
> +                goto fail;
>              }
>          }
>      }
>  
>      return 0;
> +
> +fail:
> +    if (fd != -1) {
> +        close(fd);
> +    }
> +    return -1;
>  }

I think, given the somewhat "hairy" nature of net_init_tap() function, which
has many error returns which should not close fd and just 3 which should, it
is better to add explicit close(fd) in these 3 places.

Besides, why do you check for fd != -1 in the fail path?  You added the goto
into the 3 places, all of them has fd != -1, and there's no other ways to
reach this place.  Are you not certain that fd will be valid here?  If yes,
I think this is yet another argument for adding close()s into the 3 places.

Thanks,

/mjt



reply via email to

[Prev in Thread] Current Thread [Next in Thread]