tapv2: coverity strikes back 60/17760/2
authorSteven Luong <sluong@cisco.com>
Thu, 21 Feb 2019 22:55:52 +0000 (14:55 -0800)
committerFlorin Coras <florin.coras@gmail.com>
Fri, 22 Feb 2019 01:25:49 +0000 (01:25 +0000)
while https://gerrit.fd.io/r/#/c/16590/ fixed the leaked fd which coverity
reported at that time, new coverity run reports simailar leaked fd in a
different goto punt path. It would be nice if coverity reported both of them
at the same time. Or perhaps it did and I just missed it. Anyway, the new fix
is to put the close (fd) statement prior to the return of tap_create_if routine
which should catch all goto's.

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

index 3739561..0b2ebd6 100644 (file)
@@ -93,6 +93,7 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
   struct vhost_memory *vhost_mem = 0;
   virtio_if_t *vif = 0;
   clib_error_t *err = 0;
+  int fd = -1;
 
   if (args->id != ~0)
     {
@@ -194,8 +195,6 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
      after we change our net namespace */
   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)
        {
@@ -211,9 +210,7 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
          args->rv = VNET_API_ERROR_NETLINK_ERROR;
          goto error;
        }
-      rc = setns (fd, CLONE_NEWNET);
-      close (fd);
-      if (rc == -1)
+      if (setns (fd, CLONE_NEWNET) == -1)
        {
          args->rv = VNET_API_ERROR_SYSCALL_ERROR_3;
          args->error = clib_error_return_unix (0, "setns '%s'",
@@ -436,6 +433,8 @@ done:
     clib_mem_free (vhost_mem);
   if (old_netns_fd != -1)
     close (old_netns_fd);
+  if (fd != -1)
+    close (fd);
 }
 
 int