[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#946824: marked as done (stretch-pu: package libvncserver/0.9.11+dfsg-1.3~deb9u2)



Your message dated Sat, 08 Feb 2020 14:23:35 +0000
with message-id <a894a0233c2d264936953d7a69507573c4a5742a.camel@adam-barratt.org.uk>
and subject line Closing bugs included in 9.12
has caused the Debian Bug report #946824,
regarding stretch-pu: package libvncserver/0.9.11+dfsg-1.3~deb9u2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
946824: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=946824
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian.org@packages.debian.org
Usertags: pu


Dear Release Team,

I have just uploaded 0.99.11+dfsg-1.3~deb9u2 of src:libvncserver, bringing the
following changes to stretch:

+  * CVE-2019-15681: rfbserver: don't leak stack memory to the remote. (Closes:
+    #943793).

Declared a <no-dsa> issue by the secteam.

+  * debian/patches:
+    + Trivial patch rebasing.
+    + Add 3 use-after-free patches. Resolve a freeze during connection closure and a
+      segmentation fault on multi-threaded VNC servers. (Closes: #905786).

Resolves freezes during connection closure. Cherry-picked from upstream.

+    + Add 0002-set-true-color-flag-to-1.patch. Fix connecting to VMware servers.
+      (Closes: #880531).

Resolves connecting to VMware servers.

Unfortunately, the two bug submitters of #880531 and #905786 were
unavailable for confirming their issues being fixed with the new version
of libvncserver. Neither was I presented with a test recipe for verifying
the bugs being fixed for buster myself.

Please note that this version for stretch is nearly identical with a just
uploaded similar update version for buster. (See: #946822).

Greets,
Mike

-- System Information:
Debian Release: 10.2
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.19.0-6-amd64 (SMP w/4 CPU cores)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
diff -Nru libvncserver-0.9.11+dfsg/debian/changelog libvncserver-0.9.11+dfsg/debian/changelog
--- libvncserver-0.9.11+dfsg/debian/changelog	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/changelog	2019-12-16 11:08:42.000000000 +0100
@@ -1,3 +1,17 @@
+libvncserver (0.9.11+dfsg-1.3~deb9u2) stretch; urgency=medium
+
+  * CVE-2019-15681:
+    + rfbserver: don't leak stack memory to the remote. (Closes: #943793).
+  * debian/patches:
+    + Trivial patch rebasing.
+    + Add 3 use-after-free patches. Resolve a freeze during connection
+      closure and a segmentation fault on multi-threaded VNC servers. (Closes:
+      #905786).
+    + Add 0002-set-true-color-flag-to-1.patch. Fix connecting to VMware servers.
+      (Closes: #880531).
+
+ -- Mike Gabriel <sunweaver@debian.org>  Mon, 16 Dec 2019 11:08:42 +0100
+
 libvncserver (0.9.11+dfsg-1.3~deb9u1) stretch-security; urgency=high
 
   * Non-maintainer upload by the Security Team.
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/0001-ignore_webclients.patch libvncserver-0.9.11+dfsg/debian/patches/0001-ignore_webclients.patch
--- libvncserver-0.9.11+dfsg/debian/patches/0001-ignore_webclients.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/0001-ignore_webclients.patch	2019-12-16 10:57:16.000000000 +0100
@@ -21,7 +21,7 @@
  bin_SCRIPTS = libvncserver-config
 --- a/configure.ac
 +++ b/configure.ac
-@@ -594,9 +594,6 @@
+@@ -583,9 +583,6 @@
  	libvncserver/Makefile
  	examples/Makefile
  	examples/android/Makefile
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/0002-set-true-color-flag-to-1.patch libvncserver-0.9.11+dfsg/debian/patches/0002-set-true-color-flag-to-1.patch
--- libvncserver-0.9.11+dfsg/debian/patches/0002-set-true-color-flag-to-1.patch	1970-01-01 01:00:00.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/0002-set-true-color-flag-to-1.patch	2019-12-16 11:08:18.000000000 +0100
@@ -0,0 +1,20 @@
+From 7c54f07ca55046c6f9b5859c44781a1f22002982 Mon Sep 17 00:00:00 2001
+From: dborth <dborth@gmail.com>
+Date: Mon, 3 Apr 2017 09:43:44 -0600
+Subject: [PATCH] Issue #141: Set trueColour flag to 1 instead of 255
+
+---
+ libvncclient/vncviewer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/libvncclient/vncviewer.c
++++ b/libvncclient/vncviewer.c
+@@ -161,7 +161,7 @@
+   client->format.depth = bitsPerSample*samplesPerPixel;
+   client->appData.requestedDepth=client->format.depth;
+   client->format.bigEndian = *(char *)&client->endianTest?FALSE:TRUE;
+-  client->format.trueColour = TRUE;
++  client->format.trueColour = 1;
+ 
+   if (client->format.bitsPerPixel == 8) {
+     client->format.redMax = 7;
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0001-tightvnc-filetransfer-tie-the-download-thread-to-the.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0001-tightvnc-filetransfer-tie-the-download-thread-to-the.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0001-tightvnc-filetransfer-tie-the-download-thread-to-the.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0001-tightvnc-filetransfer-tie-the-download-thread-to-the.patch	2019-12-16 10:57:16.000000000 +0100
@@ -13,11 +13,9 @@
  libvncserver/tightvnc-filetransfer/rfbtightproto.h             | 1 +
  2 files changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-index 0473783164f2..8e38f8880f5b 100644
 --- a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
 +++ b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-@@ -508,7 +508,6 @@ RunFileDownloadThread(void* client)
+@@ -506,7 +506,6 @@
  void
  HandleFileDownload(rfbClientPtr cl, rfbTightClientPtr rtcp)
  {
@@ -25,7 +23,7 @@
  	FileTransferMsg fileDownloadMsg;
  	
  	memset(&fileDownloadMsg, 0, sizeof(FileTransferMsg));
-@@ -521,7 +520,7 @@ HandleFileDownload(rfbClientPtr cl, rfbTightClientPtr rtcp)
+@@ -519,7 +518,7 @@
  	rtcp->rcft.rcfd.downloadInProgress = FALSE;
  	rtcp->rcft.rcfd.downloadFD = -1;
  
@@ -34,11 +32,9 @@
  	cl) != 0) {
  		FileTransferMsg ftm = GetFileDownLoadErrMsg();
  		
-diff --git a/libvncserver/tightvnc-filetransfer/rfbtightproto.h b/libvncserver/tightvnc-filetransfer/rfbtightproto.h
-index d0fe642ecfa3..30fc5f5413aa 100644
 --- a/libvncserver/tightvnc-filetransfer/rfbtightproto.h
 +++ b/libvncserver/tightvnc-filetransfer/rfbtightproto.h
-@@ -148,6 +148,7 @@ typedef struct _rfbClientFileDownload {
+@@ -148,6 +148,7 @@
  	int downloadInProgress;
  	unsigned long mTime;
  	int downloadFD;
@@ -46,6 +42,3 @@
  } rfbClientFileDownload ;
  
  typedef struct _rfbClientFileUpload {
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0002-tightvnc-filetransfer-refactor-CloseUndoneFileTransf.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0002-tightvnc-filetransfer-refactor-CloseUndoneFileTransf.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0002-tightvnc-filetransfer-refactor-CloseUndoneFileTransf.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0002-tightvnc-filetransfer-refactor-CloseUndoneFileTransf.patch	2019-12-16 10:57:16.000000000 +0100
@@ -16,11 +16,9 @@
  .../handlefiletransferrequest.c                      |  8 ++++----
  3 files changed, 16 insertions(+), 7 deletions(-)
 
-diff --git a/libvncserver/tightvnc-filetransfer/filetransfermsg.c b/libvncserver/tightvnc-filetransfer/filetransfermsg.c
-index 5f84e7f3d323..f674b9283126 100644
 --- a/libvncserver/tightvnc-filetransfer/filetransfermsg.c
 +++ b/libvncserver/tightvnc-filetransfer/filetransfermsg.c
-@@ -672,7 +672,7 @@ ChkFileUploadWriteErr(rfbClientPtr cl, rfbTightClientPtr rtcp, char* pBuf)
+@@ -670,7 +670,7 @@
  		char reason[] = "Error writing file data";
  		int reasonLen = strlen(reason);
  		ftm = CreateFileUploadErrMsg(reason, reasonLen);
@@ -29,7 +27,7 @@
  	}		
  	return ftm;
  }
-@@ -735,7 +735,7 @@ CreateFileUploadErrMsg(char* reason, unsigned int reasonLen)
+@@ -733,7 +733,7 @@
   ******************************************************************************/
  
  void
@@ -38,7 +36,7 @@
  {
  	/* TODO :: File Upload case is not handled currently */
  	/* TODO :: In case of concurrency we need to use Critical Section */
-@@ -759,6 +759,14 @@ CloseUndoneFileTransfer(rfbClientPtr cl, rfbTightClientPtr rtcp)
+@@ -757,6 +757,14 @@
  
  		memset(rtcp->rcft.rcfu.fName, 0 , PATH_MAX);
  	}
@@ -53,11 +51,9 @@
  	
  	if(rtcp->rcft.rcfd.downloadInProgress == TRUE) {
  		rtcp->rcft.rcfd.downloadInProgress = FALSE;
-diff --git a/libvncserver/tightvnc-filetransfer/filetransfermsg.h b/libvncserver/tightvnc-filetransfer/filetransfermsg.h
-index 3b27bd04d3f0..bbb9148db4d6 100644
 --- a/libvncserver/tightvnc-filetransfer/filetransfermsg.h
 +++ b/libvncserver/tightvnc-filetransfer/filetransfermsg.h
-@@ -51,7 +51,8 @@ FileTransferMsg ChkFileUploadWriteErr(rfbClientPtr cl, rfbTightClientPtr data, c
+@@ -51,7 +51,8 @@
  
  void CreateDirectory(char* dirName);
  void FileUpdateComplete(rfbClientPtr cl, rfbTightClientPtr data);
@@ -67,11 +63,9 @@
  
  void FreeFileTransferMsg(FileTransferMsg ftm);
  
-diff --git a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-index 8e38f8880f5b..31163d0f62f3 100644
 --- a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
 +++ b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-@@ -492,7 +492,7 @@ RunFileDownloadThread(void* client)
+@@ -490,7 +490,7 @@
  
  				if(cl != NULL) {
  			    	rfbCloseClient(cl);
@@ -80,7 +74,7 @@
  				}
  				
  				FreeFileTransferMsg(fileDownloadMsg);
-@@ -592,7 +592,7 @@ HandleFileDownloadCancelRequest(rfbClientPtr cl, rfbTightClientPtr rtcp)
+@@ -588,7 +588,7 @@
  					" reason <%s>\n", __FILE__, __FUNCTION__, reason);
  	
  	pthread_mutex_lock(&fileDownloadMutex);
@@ -89,7 +83,7 @@
  	pthread_mutex_unlock(&fileDownloadMutex);
  	
  	if(reason != NULL) {
-@@ -835,7 +835,7 @@ HandleFileUploadDataRequest(rfbClientPtr cl, rfbTightClientPtr rtcp)
+@@ -831,7 +831,7 @@
  			FreeFileTransferMsg(ftm);
  		}
  
@@ -98,7 +92,7 @@
  
  	    if(pBuf != NULL) {
  	    	free(pBuf);
-@@ -935,7 +935,7 @@ HandleFileUploadFailedRequest(rfbClientPtr cl, rfbTightClientPtr rtcp)
+@@ -931,7 +931,7 @@
  	rfbLog("File [%s]: Method [%s]: File Upload Failed Request received:"
  				" reason <%s>\n", __FILE__, __FUNCTION__, reason);
  
@@ -107,6 +101,3 @@
  
  	if(reason != NULL) {
  		free(reason);
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0003-tightvnc-filetransfer-wait-for-download-thread-end-i.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0003-tightvnc-filetransfer-wait-for-download-thread-end-i.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0003-tightvnc-filetransfer-wait-for-download-thread-end-i.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0003-tightvnc-filetransfer-wait-for-download-thread-end-i.patch	2019-12-16 10:57:16.000000000 +0100
@@ -15,11 +15,9 @@
  libvncserver/tightvnc-filetransfer/rfbtightserver.c  | 7 +++++--
  2 files changed, 7 insertions(+), 2 deletions(-)
 
-diff --git a/libvncserver/tightvnc-filetransfer/filetransfermsg.c b/libvncserver/tightvnc-filetransfer/filetransfermsg.c
-index f674b9283126..0003b11f6f50 100644
 --- a/libvncserver/tightvnc-filetransfer/filetransfermsg.c
 +++ b/libvncserver/tightvnc-filetransfer/filetransfermsg.c
-@@ -770,6 +770,8 @@ CloseUndoneFileDownload(rfbClientPtr cl, rfbTightClientPtr rtcp)
+@@ -768,6 +768,8 @@
  	
  	if(rtcp->rcft.rcfd.downloadInProgress == TRUE) {
  		rtcp->rcft.rcfd.downloadInProgress = FALSE;
@@ -28,8 +26,6 @@
  
  		if(rtcp->rcft.rcfd.downloadFD != -1) {			
  			close(rtcp->rcft.rcfd.downloadFD);
-diff --git a/libvncserver/tightvnc-filetransfer/rfbtightserver.c b/libvncserver/tightvnc-filetransfer/rfbtightserver.c
-index 67d4cb545fad..651d8fb7e75f 100644
 --- a/libvncserver/tightvnc-filetransfer/rfbtightserver.c
 +++ b/libvncserver/tightvnc-filetransfer/rfbtightserver.c
 @@ -26,6 +26,7 @@
@@ -40,7 +36,7 @@
  
  /*
   * Get my data!
-@@ -448,9 +449,11 @@ rfbTightExtensionMsgHandler(struct _rfbClientRec* cl, void* data,
+@@ -448,9 +449,11 @@
  void
  rfbTightExtensionClientClose(rfbClientPtr cl, void* data) {
  
@@ -54,6 +50,3 @@
  }
  
  void
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0004-tightvnc-filetransfer-when-creating-a-new-download-t.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0004-tightvnc-filetransfer-when-creating-a-new-download-t.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0004-tightvnc-filetransfer-when-creating-a-new-download-t.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0004-tightvnc-filetransfer-when-creating-a-new-download-t.patch	2019-12-16 10:57:16.000000000 +0100
@@ -12,11 +12,9 @@
  libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c | 3 +--
  1 file changed, 1 insertion(+), 2 deletions(-)
 
-diff --git a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-index 31163d0f62f3..70e105f45adb 100644
 --- a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
 +++ b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-@@ -517,8 +517,7 @@ HandleFileDownload(rfbClientPtr cl, rfbTightClientPtr rtcp)
+@@ -515,8 +515,7 @@
  		FreeFileTransferMsg(fileDownloadMsg);
  		return;
  	}
@@ -26,6 +24,3 @@
  
  	if(pthread_create(&rtcp->rcft.rcfd.downloadThread, NULL, RunFileDownloadThread, (void*)
  	cl) != 0) {
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0005-tightvnc-filetransfer-do-not-close-stuff-from-within.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0005-tightvnc-filetransfer-do-not-close-stuff-from-within.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0005-tightvnc-filetransfer-do-not-close-stuff-from-within.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15126/0005-tightvnc-filetransfer-do-not-close-stuff-from-within.patch	2019-12-16 10:57:16.000000000 +0100
@@ -13,11 +13,9 @@
  .../tightvnc-filetransfer/handlefiletransferrequest.c       | 6 ------
  1 file changed, 6 deletions(-)
 
-diff --git a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-index 70e105f45adb..71fb08512470 100644
 --- a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
 +++ b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-@@ -489,12 +489,6 @@ RunFileDownloadThread(void* client)
+@@ -487,12 +487,6 @@
  			if(rfbWriteExact(cl, fileDownloadMsg.data, fileDownloadMsg.length) < 0)  {
  				rfbLog("File [%s]: Method [%s]: Error while writing to socket \n"
  						, __FILE__, __FUNCTION__);
@@ -30,6 +28,3 @@
  				FreeFileTransferMsg(fileDownloadMsg);
  				return NULL;
  			}
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15127/0001-LibVNCServer-fix-heap-out-of-bound-write-access.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15127/0001-LibVNCServer-fix-heap-out-of-bound-write-access.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15127/0001-LibVNCServer-fix-heap-out-of-bound-write-access.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-15127/0001-LibVNCServer-fix-heap-out-of-bound-write-access.patch	2019-12-16 10:57:16.000000000 +0100
@@ -11,11 +11,9 @@
  libvncserver/rfbserver.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
-index ed1365a55389..6ca511fee3ed 100644
 --- a/libvncserver/rfbserver.c
 +++ b/libvncserver/rfbserver.c
-@@ -1465,7 +1465,7 @@ char *rfbProcessFileTransferReadBuffer(rfbClientPtr cl, uint32_t length)
+@@ -1466,7 +1466,7 @@
      rfbLog("rfbProcessFileTransferReadBuffer(%dlen)\n", length);
      */
      if (length>0) {
@@ -24,6 +22,3 @@
          if (buffer!=NULL) {
              if ((n = rfbReadExact(cl, (char *)buffer, length)) <= 0) {
                  if (n != 0)
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20019/0001-LibVNCClient-fix-three-possible-heap-buffer-overflow.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20019/0001-LibVNCClient-fix-three-possible-heap-buffer-overflow.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20019/0001-LibVNCClient-fix-three-possible-heap-buffer-overflow.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20019/0001-LibVNCClient-fix-three-possible-heap-buffer-overflow.patch	2019-12-16 10:57:16.000000000 +0100
@@ -14,11 +14,9 @@
  libvncclient/rfbproto.c | 10 ++++++----
  1 file changed, 6 insertions(+), 4 deletions(-)
 
-diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c
-index 8d6a4c1f0d9d..ac2a983597e4 100644
 --- a/libvncclient/rfbproto.c
 +++ b/libvncclient/rfbproto.c
-@@ -433,7 +433,7 @@ rfbHandleAuthResult(rfbClient* client)
+@@ -553,7 +553,7 @@
          /* we have an error following */
          if (!ReadFromRFBServer(client, (char *)&reasonLen, 4)) return FALSE;
          reasonLen = rfbClientSwap32IfLE(reasonLen);
@@ -27,7 +25,7 @@
          if (!ReadFromRFBServer(client, reason, reasonLen)) { free(reason); return FALSE; }
          reason[reasonLen]=0;
          rfbClientLog("VNC connection failed: %s\n",reason);
-@@ -461,7 +461,7 @@ ReadReason(rfbClient* client)
+@@ -581,7 +581,7 @@
      /* we have an error following */
      if (!ReadFromRFBServer(client, (char *)&reasonLen, 4)) return;
      reasonLen = rfbClientSwap32IfLE(reasonLen);
@@ -36,7 +34,7 @@
      if (!ReadFromRFBServer(client, reason, reasonLen)) { free(reason); return; }
      reason[reasonLen]=0;
      rfbClientLog("VNC connection failed: %s\n",reason);
-@@ -2187,10 +2187,12 @@ HandleRFBServerMessage(rfbClient* client)
+@@ -2245,10 +2245,12 @@
  
      msg.sct.length = rfbClientSwap32IfLE(msg.sct.length);
  
@@ -51,6 +49,3 @@
  
      buffer[msg.sct.length] = 0;
  
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20021/0001-LibVNCClient-fix-possible-infinite-loop.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20021/0001-LibVNCClient-fix-possible-infinite-loop.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20021/0001-LibVNCClient-fix-possible-infinite-loop.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20021/0001-LibVNCClient-fix-possible-infinite-loop.patch	2019-12-16 10:57:16.000000000 +0100
@@ -11,11 +11,9 @@
  libvncclient/rfbproto.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c
-index 808ad4d28b7f..8d6a4c1f0d9d 100644
 --- a/libvncclient/rfbproto.c
 +++ b/libvncclient/rfbproto.c
-@@ -1879,7 +1879,7 @@ HandleRFBServerMessage(rfbClient* client)
+@@ -1973,7 +1973,7 @@
  	/* Regardless of cause, do not divide by zero. */
  	linesToRead = bytesPerLine ? (RFB_BUFFER_SIZE / bytesPerLine) : 0;
  
@@ -24,6 +22,3 @@
  	  if (linesToRead > h)
  	    linesToRead = h;
  
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20022/0001-LibVNCClient-don-t-leak-uninitialised-memory-to-remo.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20022/0001-LibVNCClient-don-t-leak-uninitialised-memory-to-remo.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20022/0001-LibVNCClient-don-t-leak-uninitialised-memory-to-remo.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20022/0001-LibVNCClient-don-t-leak-uninitialised-memory-to-remo.patch	2019-12-16 10:57:16.000000000 +0100
@@ -14,11 +14,9 @@
  libvncclient/rfbproto.c | 2 ++
  1 file changed, 2 insertions(+)
 
-diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c
-index 669e38848d15..808ad4d28b7f 100644
 --- a/libvncclient/rfbproto.c
 +++ b/libvncclient/rfbproto.c
-@@ -1643,6 +1643,7 @@ SendKeyEvent(rfbClient* client, uint32_t key, rfbBool down)
+@@ -1739,6 +1739,7 @@
  
    if (!SupportsClient2Server(client, rfbKeyEvent)) return TRUE;
  
@@ -26,7 +24,7 @@
    ke.type = rfbKeyEvent;
    ke.down = down ? 1 : 0;
    ke.key = rfbClientSwap32IfLE(key);
-@@ -1661,6 +1662,7 @@ SendClientCutText(rfbClient* client, char *str, int len)
+@@ -1757,6 +1758,7 @@
  
    if (!SupportsClient2Server(client, rfbClientCutText)) return TRUE;
  
@@ -34,6 +32,3 @@
    cct.type = rfbClientCutText;
    cct.length = rfbClientSwap32IfLE(len);
    return  (WriteToRFBServer(client, (char *)&cct, sz_rfbClientCutTextMsg) &&
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20023/0001-When-connecting-to-a-repeater-only-send-initialised-.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20023/0001-When-connecting-to-a-repeater-only-send-initialised-.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20023/0001-When-connecting-to-a-repeater-only-send-initialised-.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20023/0001-When-connecting-to-a-repeater-only-send-initialised-.patch	2019-12-16 10:57:16.000000000 +0100
@@ -12,11 +12,9 @@
  libvncclient/rfbproto.c |  8 ++++++--
  2 files changed, 14 insertions(+), 4 deletions(-)
 
-diff --git a/examples/repeater.c b/examples/repeater.c
-index cf0350ff98a2..dbfa39e1d514 100644
 --- a/examples/repeater.c
 +++ b/examples/repeater.c
-@@ -12,6 +12,7 @@ int main(int argc,char** argv)
+@@ -12,6 +12,7 @@
    char *repeaterHost;
    int repeaterPort, sock;
    char id[250];
@@ -24,7 +22,7 @@
    rfbClientPtr cl;
  
    int i,j;
-@@ -23,7 +24,12 @@ int main(int argc,char** argv)
+@@ -23,7 +24,12 @@
        "Usage: %s <id> <repeater-host> [<repeater-port>]\n", argv[0]);
      exit(1);
    }
@@ -38,7 +36,7 @@
    repeaterHost = argv[2];
    repeaterPort = argc < 4 ? 5500 : atoi(argv[3]);
  
-@@ -48,7 +54,7 @@ int main(int argc,char** argv)
+@@ -48,7 +54,7 @@
      perror("connect to repeater");
      return 1;
    }
@@ -47,11 +45,9 @@
      perror("writing id");
      return 1;
    }
-diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c
-index e5373bc4345f..669e38848d15 100644
 --- a/libvncclient/rfbproto.c
 +++ b/libvncclient/rfbproto.c
-@@ -363,6 +363,7 @@ rfbBool ConnectToRFBRepeater(rfbClient* client,const char *repeaterHost, int rep
+@@ -487,6 +487,7 @@
    rfbProtocolVersionMsg pv;
    int major,minor;
    char tmphost[250];
@@ -59,7 +55,7 @@
  
  #ifdef LIBVNCSERVER_IPv6
    client->sock = ConnectClientToTcpAddr6(repeaterHost, repeaterPort);
-@@ -398,8 +399,11 @@ rfbBool ConnectToRFBRepeater(rfbClient* client,const char *repeaterHost, int rep
+@@ -522,8 +523,11 @@
  
    rfbClientLog("Connected to VNC repeater, using protocol version %d.%d\n", major, minor);
  
@@ -73,6 +69,3 @@
      return FALSE;
  
    return TRUE;
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0001-LibVNCClient-ignore-server-sent-cut-text-longer-than.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0001-LibVNCClient-ignore-server-sent-cut-text-longer-than.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0001-LibVNCClient-ignore-server-sent-cut-text-longer-than.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0001-LibVNCClient-ignore-server-sent-cut-text-longer-than.patch	2019-12-16 10:57:16.000000000 +0100
@@ -11,11 +11,9 @@
  libvncclient/rfbproto.c | 5 +++++
  1 file changed, 5 insertions(+)
 
-diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c
-index 4541e0d53ad3..8792dbf67c48 100644
 --- a/libvncclient/rfbproto.c
 +++ b/libvncclient/rfbproto.c
-@@ -2217,6 +2217,11 @@ HandleRFBServerMessage(rfbClient* client)
+@@ -2251,6 +2251,11 @@
  
      msg.sct.length = rfbClientSwap32IfLE(msg.sct.length);
  
@@ -27,6 +25,3 @@
      buffer = malloc((uint64_t)msg.sct.length+1);
  
      if (!ReadFromRFBServer(client, buffer, msg.sct.length)) {
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0002-LibVNCClient-ignore-server-sent-reason-strings-longe.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0002-LibVNCClient-ignore-server-sent-reason-strings-longe.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0002-LibVNCClient-ignore-server-sent-reason-strings-longe.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0002-LibVNCClient-ignore-server-sent-reason-strings-longe.patch	2019-12-16 10:57:16.000000000 +0100
@@ -10,11 +10,9 @@
  libvncclient/rfbproto.c | 45 +++++++++++++++++++----------------------
  1 file changed, 21 insertions(+), 24 deletions(-)
 
-diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c
-index 8792dbf67c48..ba7d70a71575 100644
 --- a/libvncclient/rfbproto.c
 +++ b/libvncclient/rfbproto.c
-@@ -412,11 +412,29 @@ rfbBool ConnectToRFBRepeater(rfbClient* client,const char *repeaterHost, int rep
+@@ -536,11 +536,29 @@
  extern void rfbClientEncryptBytes(unsigned char* bytes, char* passwd);
  extern void rfbClientEncryptBytes2(unsigned char *where, const int length, unsigned char *key);
  
@@ -46,7 +44,7 @@
  
      if (!ReadFromRFBServer(client, (char *)&authResult, 4)) return FALSE;
  
-@@ -431,13 +449,7 @@ rfbHandleAuthResult(rfbClient* client)
+@@ -555,13 +573,7 @@
        if (client->major==3 && client->minor>7)
        {
          /* we have an error following */
@@ -61,7 +59,7 @@
          return FALSE;
        }
        rfbClientLog("VNC authentication failed\n");
-@@ -452,21 +464,6 @@ rfbHandleAuthResult(rfbClient* client)
+@@ -576,21 +588,6 @@
      return FALSE;
  }
  
@@ -83,6 +81,3 @@
  
  static rfbBool
  ReadSupportedSecurityType(rfbClient* client, uint32_t *result, rfbBool subAuth)
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0003-LibVNCClient-fail-on-server-sent-desktop-name-length.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0003-LibVNCClient-fail-on-server-sent-desktop-name-length.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0003-LibVNCClient-fail-on-server-sent-desktop-name-length.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0003-LibVNCClient-fail-on-server-sent-desktop-name-length.patch	2019-12-16 10:57:16.000000000 +0100
@@ -11,11 +11,9 @@
  libvncclient/rfbproto.c | 8 ++++++--
  1 file changed, 6 insertions(+), 2 deletions(-)
 
-diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c
-index e56e778f6b91..6af21a54f07b 100644
 --- a/libvncclient/rfbproto.c
 +++ b/libvncclient/rfbproto.c
-@@ -1224,8 +1224,12 @@ InitialiseRFBConnection(rfbClient* client)
+@@ -1293,8 +1293,12 @@
    client->si.format.blueMax = rfbClientSwap16IfLE(client->si.format.blueMax);
    client->si.nameLength = rfbClientSwap32IfLE(client->si.nameLength);
  
@@ -30,6 +28,3 @@
    if (!client->desktopName) {
      rfbClientLog("Error allocating memory for desktop name, %lu bytes\n",
              (unsigned long)client->si.nameLength);
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0004-LibVNCClient-remove-now-useless-cast.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0004-LibVNCClient-remove-now-useless-cast.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0004-LibVNCClient-remove-now-useless-cast.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20748/0004-LibVNCClient-remove-now-useless-cast.patch	2019-12-16 10:57:16.000000000 +0100
@@ -10,11 +10,9 @@
  libvncclient/rfbproto.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c
-index 6af21a54f07b..2f887c32978f 100644
 --- a/libvncclient/rfbproto.c
 +++ b/libvncclient/rfbproto.c
-@@ -2227,7 +2227,7 @@ HandleRFBServerMessage(rfbClient* client)
+@@ -2257,7 +2257,7 @@
  	    return FALSE;
      }  
  
@@ -23,6 +21,3 @@
  
      if (!ReadFromRFBServer(client, buffer, msg.sct.length)) {
        free(buffer);
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20749/0001-Error-out-in-rfbProcessFileTransferReadBuffer-if-len.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20749/0001-Error-out-in-rfbProcessFileTransferReadBuffer-if-len.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20749/0001-Error-out-in-rfbProcessFileTransferReadBuffer-if-len.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-20749/0001-Error-out-in-rfbProcessFileTransferReadBuffer-if-len.patch	2019-12-16 10:57:16.000000000 +0100
@@ -11,11 +11,9 @@
  libvncserver/rfbserver.c | 14 ++++++++++++--
  1 file changed, 12 insertions(+), 2 deletions(-)
 
-diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
-index 6ca511fee3ed..e210a32f5c45 100644
 --- a/libvncserver/rfbserver.c
 +++ b/libvncserver/rfbserver.c
-@@ -1461,11 +1461,21 @@ char *rfbProcessFileTransferReadBuffer(rfbClientPtr cl, uint32_t length)
+@@ -1462,11 +1462,21 @@
      int   n=0;
  
      FILEXFER_ALLOWED_OR_CLOSE_AND_RETURN("", cl, NULL);
@@ -39,6 +37,3 @@
          if (buffer!=NULL) {
              if ((n = rfbReadExact(cl, (char *)buffer, length)) <= 0) {
                  if (n != 0)
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-6307/0001-tightvnc-filetransfer-fix-heap-use-after-free.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-6307/0001-tightvnc-filetransfer-fix-heap-use-after-free.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-6307/0001-tightvnc-filetransfer-fix-heap-use-after-free.patch	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2018-6307/0001-tightvnc-filetransfer-fix-heap-use-after-free.patch	2019-12-16 10:57:16.000000000 +0100
@@ -17,11 +17,9 @@
  libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c | 2 ++
  1 file changed, 2 insertions(+)
 
-diff --git a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-index c511eed17fcd..0473783164f2 100644
 --- a/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
 +++ b/libvncserver/tightvnc-filetransfer/handlefiletransferrequest.c
-@@ -585,6 +585,8 @@ HandleFileDownloadCancelRequest(rfbClientPtr cl, rfbTightClientPtr rtcp)
+@@ -575,6 +575,8 @@
  					"FileDownloadCancelMsg\n", __FILE__, __FUNCTION__);
  		
  	    rfbCloseClient(cl);
@@ -30,6 +28,3 @@
  	}
  
  	rfbLog("File [%s]: Method [%s]: File Download Cancel Request received:"
--- 
-2.20.1
-
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/CVE-2019-15681/0001-rfbserver-don-t-leak-stack-memory-to-the-remote.patch libvncserver-0.9.11+dfsg/debian/patches/CVE-2019-15681/0001-rfbserver-don-t-leak-stack-memory-to-the-remote.patch
--- libvncserver-0.9.11+dfsg/debian/patches/CVE-2019-15681/0001-rfbserver-don-t-leak-stack-memory-to-the-remote.patch	1970-01-01 01:00:00.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/CVE-2019-15681/0001-rfbserver-don-t-leak-stack-memory-to-the-remote.patch	2019-12-16 10:57:16.000000000 +0100
@@ -0,0 +1,21 @@
+From d01e1bb4246323ba6fcee3b82ef1faa9b1dac82a Mon Sep 17 00:00:00 2001
+From: Christian Beier <dontmind@freeshell.org>
+Date: Mon, 19 Aug 2019 22:32:25 +0200
+Subject: [PATCH] rfbserver: don't leak stack memory to the remote
+
+Thanks go to Pavel Cheremushkin of Kaspersky for reporting.
+---
+ libvncserver/rfbserver.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/libvncserver/rfbserver.c
++++ b/libvncserver/rfbserver.c
+@@ -3529,6 +3529,8 @@
+     rfbServerCutTextMsg sct;
+     rfbClientIteratorPtr iterator;
+ 
++    memset((char *)&sct, 0, sizeof(sct));
++
+     iterator = rfbGetClientIterator(rfbScreen);
+     while ((cl = rfbClientIteratorNext(iterator)) != NULL) {
+         sct.type = rfbServerCutText;
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/series libvncserver-0.9.11+dfsg/debian/patches/series
--- libvncserver-0.9.11+dfsg/debian/patches/series	2019-02-02 22:41:23.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/series	2019-12-16 11:08:18.000000000 +0100
@@ -21,3 +21,8 @@
 CVE-2018-20748/0004-LibVNCClient-remove-now-useless-cast.patch
 CVE-2018-20749/0001-Error-out-in-rfbProcessFileTransferReadBuffer-if-len.patch
 CVE-2018-20750/0001-Limit-lenght-to-INT_MAX-bytes-in-rfbProcessFileTrans.patch
+CVE-2019-15681/0001-rfbserver-don-t-leak-stack-memory-to-the-remote.patch
+use-after-free/1.patch
+use-after-free/2.patch
+use-after-free/3.patch
+0002-set-true-color-flag-to-1.patch
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/use-after-free/1.patch libvncserver-0.9.11+dfsg/debian/patches/use-after-free/1.patch
--- libvncserver-0.9.11+dfsg/debian/patches/use-after-free/1.patch	1970-01-01 01:00:00.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/use-after-free/1.patch	2019-12-16 11:08:10.000000000 +0100
@@ -0,0 +1,39 @@
+From 96e163bdae65aa2c68e4301cf9ebe29e9f53f3d9 Mon Sep 17 00:00:00 2001
+From: Quentin BUATHIER <qbuathier@tetrane.com>
+Date: Wed, 8 Aug 2018 16:14:39 +0200
+Subject: [PATCH] Fix use-after-free
+
+---
+ libvncserver/main.c | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+--- a/libvncserver/main.c
++++ b/libvncserver/main.c
+@@ -1064,15 +1064,21 @@
+ 
+ void rfbShutdownServer(rfbScreenInfoPtr screen,rfbBool disconnectClients) {
+   if(disconnectClients) {
+-    rfbClientPtr cl;
+     rfbClientIteratorPtr iter = rfbGetClientIterator(screen);
+-    while( (cl = rfbClientIteratorNext(iter)) ) {
+-      if (cl->sock > -1) {
+-       /* we don't care about maxfd here, because the server goes away */
+-       rfbCloseClient(cl);
+-       rfbClientConnectionGone(cl);
++    rfbClientPtr nextCl, currentCl = rfbClientIteratorNext(iter);
++
++    while(currentCl) {
++      nextCl = rfbClientIteratorNext(iter);
++      if (currentCl->sock > -1) {
++        /* we don't care about maxfd here, because the server goes away */
++        rfbCloseClient(currentCl);
+       }
++
++      rfbClientConnectionGone(currentCl);
++
++      currentCl = nextCl;
+     }
++
+     rfbReleaseClientIterator(iter);
+   }
+ 
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/use-after-free/2.patch libvncserver-0.9.11+dfsg/debian/patches/use-after-free/2.patch
--- libvncserver-0.9.11+dfsg/debian/patches/use-after-free/2.patch	1970-01-01 01:00:00.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/use-after-free/2.patch	2019-12-16 11:08:10.000000000 +0100
@@ -0,0 +1,112 @@
+From cedae6e6f97b14f5df3ea7c5f7efd59f2bc9ad82 Mon Sep 17 00:00:00 2001
+From: Quentin BUATHIER <qbuathier@tetrane.com>
+Date: Thu, 9 Aug 2018 09:33:59 +0200
+Subject: [PATCH] Fix the concurrent issue hapenning between the freeing of the
+ client and the clientOutput thread
+
+---
+ libvncserver/main.c      | 29 ++++++++++++++++++++++++++---
+ libvncserver/rfbserver.c |  5 +++++
+ rfb/rfb.h                |  1 +
+ 3 files changed, 32 insertions(+), 3 deletions(-)
+
+--- a/libvncserver/main.c
++++ b/libvncserver/main.c
+@@ -33,6 +33,7 @@
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <unistd.h>
++#include <fcntl.h>
+ #endif
+ 
+ #include <signal.h>
+@@ -524,6 +525,7 @@
+ 
+ 	FD_ZERO(&rfds);
+ 	FD_SET(cl->sock, &rfds);
++	FD_SET(cl->pipe_notify_client_thread[0], &rfds);
+ 	FD_ZERO(&efds);
+ 	FD_SET(cl->sock, &efds);
+ 
+@@ -532,9 +534,13 @@
+ 	if ((cl->fileTransfer.fd!=-1) && (cl->fileTransfer.sending==1))
+ 	    FD_SET(cl->sock, &wfds);
+ 
++	int nfds = cl->pipe_notify_client_thread[0] > cl->sock ? cl->pipe_notify_client_thread[0] : cl->sock;
++	
+ 	tv.tv_sec = 60; /* 1 minute */
+ 	tv.tv_usec = 0;
+-	n = select(cl->sock + 1, &rfds, &wfds, &efds, &tv);
++
++	n = select(nfds + 1, &rfds, &wfds, &efds, &tv);
++
+ 	if (n < 0) {
+ 	    rfbLogPerror("ReadExact: select");
+ 	    break;
+@@ -549,6 +555,13 @@
+         if (FD_ISSET(cl->sock, &wfds))
+             rfbSendFileTransferChunk(cl);
+ 
++	if (FD_ISSET(cl->pipe_notify_client_thread[0], &rfds))
++	{
++	    // Reset the pipe
++	    char buf;
++	    while (read(cl->pipe_notify_client_thread[0], &buf, sizeof(buf)) == sizeof(buf));
++	}
++
+         if (FD_ISSET(cl->sock, &rfds) || FD_ISSET(cl->sock, &efds))
+         {
+ #ifdef LIBVNCSERVER_WITH_WEBSOCKETS
+@@ -619,8 +632,12 @@
+ {
+     cl->onHold = FALSE;
+ #ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
+-    if(cl->screen->backgroundLoop)
+-	pthread_create(&cl->client_thread, NULL, clientInput, (void *)cl);
++    if(cl->screen->backgroundLoop) {
++        pipe(cl->pipe_notify_client_thread);
++        fcntl(cl->pipe_notify_client_thread[0], F_SETFL, O_NONBLOCK);
++
++        pthread_create(&cl->client_thread, NULL, clientInput, (void *)cl);
++    }
+ #endif
+ }
+ 
+@@ -1074,7 +1091,13 @@
+         rfbCloseClient(currentCl);
+       }
+ 
++#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
++      // Notify the thread and join it
++      write(currentCl->pipe_notify_client_thread[1], "\x00", 1);
++      pthread_join(currentCl->client_thread, NULL);
++#else
+       rfbClientConnectionGone(currentCl);
++#endif
+ 
+       currentCl = nextCl;
+     }
+--- a/libvncserver/rfbserver.c
++++ b/libvncserver/rfbserver.c
+@@ -622,6 +622,11 @@
+     UNLOCK(cl->sendMutex);
+     TINI_MUTEX(cl->sendMutex);
+ 
++#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
++    close(cl->pipe_notify_client_thread[0]);
++    close(cl->pipe_notify_client_thread[1]);
++#endif
++
+     rfbPrintStats(cl);
+     rfbResetStats(cl);
+ 
+--- a/rfb/rfb.h
++++ b/rfb/rfb.h
+@@ -466,6 +466,7 @@
+     int protocolMinorVersion;
+ 
+ #ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
++    int pipe_notify_client_thread[2];
+     pthread_t client_thread;
+ #endif
+ 
diff -Nru libvncserver-0.9.11+dfsg/debian/patches/use-after-free/3.patch libvncserver-0.9.11+dfsg/debian/patches/use-after-free/3.patch
--- libvncserver-0.9.11+dfsg/debian/patches/use-after-free/3.patch	1970-01-01 01:00:00.000000000 +0100
+++ libvncserver-0.9.11+dfsg/debian/patches/use-after-free/3.patch	2019-12-16 11:08:10.000000000 +0100
@@ -0,0 +1,23 @@
+From 00bae113d54014bafcf20c9f4c8c296e3e91bde5 Mon Sep 17 00:00:00 2001
+From: Quentin BUATHIER <qbuathier@tetrane.com>
+Date: Thu, 6 Dec 2018 09:16:51 +0100
+Subject: [PATCH] Check the return code of pipe
+
+---
+ libvncserver/main.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/libvncserver/main.c
++++ b/libvncserver/main.c
+@@ -633,7 +633,10 @@
+     cl->onHold = FALSE;
+ #ifdef LIBVNCSERVER_HAVE_LIBPTHREAD
+     if(cl->screen->backgroundLoop) {
+-        pipe(cl->pipe_notify_client_thread);
++        if (pipe(cl->pipe_notify_client_thread) == -1) {
++            cl->pipe_notify_client_thread[0] = -1;
++            cl->pipe_notify_client_thread[1] = -1;
++        }
+         fcntl(cl->pipe_notify_client_thread[0], F_SETFL, O_NONBLOCK);
+ 
+         pthread_create(&cl->client_thread, NULL, clientInput, (void *)cl);

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 9.12

Hi,

Each of the uploads referred to by these bugs was included in today's
oldstable point release.

Regards,

Adam

--- End Message ---

Reply to: