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

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