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

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