Blame SOURCES/Do-not-listen-all-if-invalid-interface-is-provided.patch

a814f4
From bfa1432ea1972b4272e3a7b8927f7c22094e5e44 Mon Sep 17 00:00:00 2001
a814f4
From: Ondrej Holy <oholy@redhat.com>
a814f4
Date: Tue, 22 May 2018 21:06:06 +0200
a814f4
Subject: [PATCH 2/2] Do not listen all if invalid interface is provided
a814f4
a814f4
It is not a good idea from security point of view to listen all interfaces
a814f4
in case of invalid interface is provided. We should rather listen to nothing
a814f4
and print error in journal.
a814f4
a814f4
https://bugzilla.gnome.org/show_bug.cgi?id=796349
a814f4
---
a814f4
 server/libvncserver/sockets.c | 18 ++++++++++++------
a814f4
 server/vino-server.c          |  3 +++
a814f4
 2 files changed, 15 insertions(+), 6 deletions(-)
a814f4
a814f4
diff --git a/server/libvncserver/sockets.c b/server/libvncserver/sockets.c
a814f4
index 746a3e5..45df6d5 100644
a814f4
--- a/server/libvncserver/sockets.c
a814f4
+++ b/server/libvncserver/sockets.c
a814f4
@@ -152,9 +152,13 @@ rfbInitListenSock(rfbScreenInfoPtr rfbScreen)
a814f4
     char *netIface = (char*)rfbScreen->netIface;
a814f4
     int i;
a814f4
 
a814f4
-    if(netIface == NULL || if_nametoindex(netIface) == 0) {
a814f4
-      if(netIface != NULL)
a814f4
-        rfbLog("WARNING: This (%s) a invalid network interface, set to all\n", netIface);
a814f4
+    if(netIface != NULL && strlen(netIface) > 0) {
a814f4
+      if(if_nametoindex(netIface) == 0) {
a814f4
+        rfbLog("(%s) is an invalid network interface\n", netIface);
a814f4
+        return;
a814f4
+      }
a814f4
+    }
a814f4
+    else {
a814f4
       netIface = NULL;
a814f4
     }
a814f4
 
a814f4
@@ -748,9 +752,11 @@ rfbSetNetworkInterface(rfbScreenInfoPtr rfbScreen, const char *netIface)
a814f4
      rfbScreen->netIface = netIface;
a814f4
   }
a814f4
   else {
a814f4
-     rfbScreen->netIface = NULL;
a814f4
-     if(netIface != NULL)
a814f4
-        rfbLog("WARNING: This (%s) a invalid network interface, set to all\n", netIface);
a814f4
+    rfbScreen->netIface = NULL;
a814f4
+    if(netIface != NULL && strlen(netIface) > 0) {
a814f4
+      rfbLog("(%s) is an invalid network interface\n", netIface);
a814f4
+      return FALSE;
a814f4
+    }
a814f4
   }
a814f4
 
a814f4
   rfbLog("Re-binding socket to listen for VNC connections on TCP port %d in (%s) interface\n",
a814f4
diff --git a/server/vino-server.c b/server/vino-server.c
a814f4
index 38b17e3..b8cd755 100644
a814f4
--- a/server/vino-server.c
a814f4
+++ b/server/vino-server.c
a814f4
@@ -970,6 +970,9 @@ vino_server_init_io_channels(VinoServer *server)
a814f4
     {
a814f4
       dprintf (RFB, "%d ", rfb_screen->rfbListenSock[i]);
a814f4
 
a814f4
+      if (rfb_screen->rfbListenSock[i] == -1)
a814f4
+        continue;
a814f4
+
a814f4
       server->priv->io_channel[i] = g_io_channel_unix_new (rfb_screen->rfbListenSock[i]);
a814f4
       server->priv->io_watch[i]   = g_io_add_watch (server->priv->io_channel[i],
a814f4
                                                     G_IO_IN|G_IO_PRI,
a814f4
-- 
a814f4
2.17.0
a814f4