tap_v2: coverity strikes, again! 96/9696/2
authorSteven <sluong@cisco.com>
Sun, 3 Dec 2017 04:17:27 +0000 (20:17 -0800)
committerDamjan Marion <dmarion.lists@gmail.com>
Mon, 4 Dec 2017 11:27:03 +0000 (11:27 +0000)
fd is not close when IOCTL encounters an error which causes resource
leak. The fix is to initialize fd to -1. At return, close fd if
it has a valid value.

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

index cc28df3..0eaaf27 100644 (file)
@@ -60,7 +60,7 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
   virtio_main_t *vim = &virtio_main;
   vnet_sw_interface_t *sw;
   vnet_hw_interface_t *hw;
-  int i, fd;
+  int i, fd = -1;
   struct ifreq ifr;
   size_t hdrsz;
   struct vhost_memory *vhost_mem = 0;
@@ -205,7 +205,6 @@ tap_create_if (vlib_main_t * vm, tap_create_if_args_t * args)
       _IOCTL (fd, SIOCGIFFLAGS, (void *) &ifr);
       ifr.ifr_flags |= IFF_UP | IFF_RUNNING;
       _IOCTL (fd, SIOCSIFFLAGS, (void *) &ifr);
-      close (fd);
     }
 
   if (!args->hw_addr_set)
@@ -268,6 +267,8 @@ error:
 done:
   if (vhost_mem)
     clib_mem_free (vhost_mem);
+  if (fd != -1)
+    close (fd);
 }
 
 int