File xrdp-safe-data-chunk-reassembly.patch of Package xrdp.27288

From 33d9e1d5d7f3ba9a6826b45f80818d8094a5072b Mon Sep 17 00:00:00 2001
From: Alexandre Quesnel <131881+aquesnel@users.noreply.github.com>
Date: Sun, 23 Aug 2020 23:02:50 +0000
Subject: [PATCH] Adding checks to prevent buffer overruns during data chunk
 re-assembly

---
 libxrdp/xrdp_channel.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/libxrdp/xrdp_channel.c b/libxrdp/xrdp_channel.c
index 9662582e3..125ac085e 100644
--- a/libxrdp/xrdp_channel.c
+++ b/libxrdp/xrdp_channel.c
@@ -463,6 +463,10 @@ xrdp_channel_process_drdynvc(struct xrdp_channel *self,
     {
         case 0:
             length = (int) (s->end - s->p);
+            if (!s_check_rem_out(self->s, length))
+            {
+                return 1;
+            }
             out_uint8a(self->s, s->p, length);
             in_uint8s(s, length);
             return 0;
@@ -471,11 +475,19 @@ xrdp_channel_process_drdynvc(struct xrdp_channel *self,
             make_stream(self->s);
             init_stream(self->s, total_length);
             length = (int) (s->end - s->p);
+            if (!s_check_rem_out(self->s, length))
+            {
+                return 1;
+            }
             out_uint8a(self->s, s->p, length);
             in_uint8s(s, length);
             return 0;
         case 2:
             length = (int) (s->end - s->p);
+            if (!s_check_rem_out(self->s, length))
+            {
+                return 1;
+            }
             out_uint8a(self->s, s->p, length);
             in_uint8s(s, length);
             ls = self->s;
openSUSE Build Service is sponsored by