tapv2: coverity woe 90/16590/2
authorSteven <sluong@cisco.com>
Fri, 21 Dec 2018 20:42:34 +0000 (12:42 -0800)
committerDamjan Marion <dmarion@me.com>
Sat, 22 Dec 2018 11:50:40 +0000 (11:50 +0000)
coverity complains about fd leaking inside the if statement because there is
a goto which bypasses the statement close (fd).

The fix is to close (fd) immediately after it is no longer used.

Change-Id: Ic5035b07ec1f179ff3db77744843e47aa8067a3c
Signed-off-by: Steven <sluong@cisco.com>
src/vnet/devices/tap/tap.c

index 3bbdd05..d0ed58c 100644 (file)
@@ -182,6 +182,7 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
   if (args->host_namespace)
     {
       int fd;
+      int rc;
       old_netns_fd = open ("/proc/self/ns/net", O_RDONLY);
       if ((fd = open_netns_fd ((char *) args->host_namespace)) == -1)
        {
@@ -197,14 +198,15 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
          args->rv = VNET_API_ERROR_NETLINK_ERROR;
          goto error;
        }
-      if (setns (fd, CLONE_NEWNET) == -1)
+      rc = setns (fd, CLONE_NEWNET);
+      close (fd);
+      if (rc == -1)
        {
          args->rv = VNET_API_ERROR_SYSCALL_ERROR_3;
          args->error = clib_error_return_unix (0, "setns '%s'",
                                                args->host_namespace);
          goto error;
        }
-      close (fd);
       if ((vif->ifindex = if_nametoindex ((char *) args->host_if_name)) == 0)
        {
          args->rv = VNET_API_ERROR_SYSCALL_ERROR_3;