From: Steven Luong Date: Thu, 21 Feb 2019 22:55:52 +0000 (-0800) Subject: tapv2: coverity strikes back X-Git-Tag: v19.04-rc1~432 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=4a310d2b50283d5553264caf50ac1aa58384468d tapv2: coverity strikes back 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 --- diff --git a/src/vnet/devices/tap/tap.c b/src/vnet/devices/tap/tap.c index 3739561cc59..0b2ebd6b5e3 100644 --- a/src/vnet/devices/tap/tap.c +++ b/src/vnet/devices/tap/tap.c @@ -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