Apart from trying to close(-1), this also leaked memory.

Signed-off-by: Phil Sutter <p...@nwl.cc>
---
 ip/ipvrf.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/ip/ipvrf.c b/ip/ipvrf.c
index 92e2db98ca7d7..75cc026d072b8 100644
--- a/ip/ipvrf.c
+++ b/ip/ipvrf.c
@@ -373,12 +373,12 @@ static int vrf_switch(const char *name)
 
        /* -1 on length to add '/' to the end */
        if (ipvrf_get_netns(netns, sizeof(netns) - 1) < 0)
-               return -1;
+               goto out;
 
        if (vrf_path(vpath, sizeof(vpath)) < 0) {
                fprintf(stderr, "Failed to get base cgroup path: %s\n",
                        strerror(errno));
-               return -1;
+               goto out;
        }
 
        /* if path already ends in netns then don't add it again */
@@ -429,13 +429,14 @@ static int vrf_switch(const char *name)
        snprintf(pid, sizeof(pid), "%d", getpid());
        if (write(fd, pid, strlen(pid)) < 0) {
                fprintf(stderr, "Failed to join cgroup\n");
-               goto out;
+               goto out2;
        }
 
        rc = 0;
+out2:
+       close(fd);
 out:
        free(mnt);
-       close(fd);
 
        return rc;
 }
-- 
2.13.1

Reply via email to