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

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