summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Ropé <jrope@redhat.com>2020-04-01 09:25:18 +0200
committerDaniel P. Berrangé <berrange@redhat.com>2020-04-03 14:08:00 +0100
commitd84149a92c8b7bd4b3cf82adb123426c50850702 (patch)
treef78e123f5fc67a29b747a43de9d16a3484aa7a84
parente4bacb8fde16cd21b8b8f095be720ad1a6c2d0e5 (diff)
Fix potential file descriptor leaks found by Coverity.
The error code returned by virt_viewer_session_open_fd() and virt_viewer_session_channel_open_fd() were not checked. The file descriptor passed to them could then be left opened even if the function failed, causing a leak of resources. This was reported by a Coverity scan, logged under https://bugzilla.redhat.com/show_bug.cgi?id=1655792 Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Julien Ropé <jrope@redhat.com>
-rw-r--r--src/virt-viewer-app.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index a292ad8..12ee09d 100644
--- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c
@@ -1296,7 +1296,11 @@ virt_viewer_app_channel_open(VirtViewerSession *session,
return;
}
- virt_viewer_session_channel_open_fd(session, channel, fd);
+ if (!virt_viewer_session_channel_open_fd(session, channel, fd)) {
+ // in case of error, close the file descriptor to prevent a leak
+ // NOTE: as VNC doesn't support channel_open, this function will always return false for this protocol.
+ close(fd);
+ }
}
#else
static void
@@ -1355,7 +1359,10 @@ virt_viewer_app_default_activate(VirtViewerApp *self, GError **error)
#endif
if (fd >= 0) {
- return virt_viewer_session_open_fd(VIRT_VIEWER_SESSION(priv->session), fd);
+ gboolean ret = virt_viewer_session_open_fd(VIRT_VIEWER_SESSION(priv->session), fd);
+ if (!ret)
+ close (fd);
+ return ret ;
} else if (priv->guri) {
virt_viewer_app_trace(self, "Opening connection to display at %s", priv->guri);
return virt_viewer_session_open_uri(VIRT_VIEWER_SESSION(priv->session), priv->guri, error);