diff mbox series

[meta-oe,kirkstone,1/2] freerdp: fix CVE-2022-39316/39318/39319

Message ID 20230509035309.3773590-1-chee.yang.lee@intel.com
State New
Headers show
Series [meta-oe,kirkstone,1/2] freerdp: fix CVE-2022-39316/39318/39319 | expand

Commit Message

Lee, Chee Yang May 9, 2023, 3:53 a.m. UTC
From: Chee Yang Lee <chee.yang.lee@intel.com>

Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
---
 .../freerdp/freerdp/CVE-2022-39316.patch      | 53 +++++++++++++++++++
 .../freerdp/CVE-2022-39318-39319.patch        | 41 ++++++++++++++
 .../recipes-support/freerdp/freerdp_2.6.1.bb  |  2 +
 3 files changed, 96 insertions(+)
 create mode 100644 meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39316.patch
 create mode 100644 meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39318-39319.patch

Comments

akuster808 May 9, 2023, 10:47 a.m. UTC | #1
On 5/8/23 11:53 PM, Lee Chee Yang wrote:
> From: Chee Yang Lee <chee.yang.lee@intel.com>
>
> Signed-off-by: Chee Yang Lee <chee.yang.lee@intel.com>
> ---
>   .../freerdp/freerdp/CVE-2022-39316.patch      | 53 +++++++++++++++++++
>   .../freerdp/CVE-2022-39318-39319.patch        | 41 ++++++++++++++
>   .../recipes-support/freerdp/freerdp_2.6.1.bb  |  2 +
>   3 files changed, 96 insertions(+)
>   create mode 100644 meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39316.patch
>   create mode 100644 meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39318-39319.patch

Do these affect master or mickledore? Adding something like " Affects 
[<, <= ] {version} " would be helpful. I am tending 4 active branches 
and not having to checking  newer branches would be nice.

BR,
- armin
>
> diff --git a/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39316.patch b/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39316.patch
> new file mode 100644
> index 0000000000..a60b2854c8
> --- /dev/null
> +++ b/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39316.patch
> @@ -0,0 +1,53 @@
> +https://github.com/FreeRDP/FreeRDP/commit/e865c24efc40ebc52e75979c94cdd4ee2c1495b0
> +CVE: CVE-2022-39316
> +Upstream-Status: Backport
> +Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
> +
> +From e865c24efc40ebc52e75979c94cdd4ee2c1495b0 Mon Sep 17 00:00:00 2001
> +From: akallabeth <akallabeth@posteo.net>
> +Date: Thu, 13 Oct 2022 09:09:28 +0200
> +Subject: [PATCH] Added missing length checks in zgfx_decompress_segment
> +
> +(cherry picked from commit 64716b335858109d14f27b51acc4c4d71a92a816)
> +---
> + libfreerdp/codec/zgfx.c | 11 +++++++----
> + 1 file changed, 7 insertions(+), 4 deletions(-)
> +
> +diff --git a/libfreerdp/codec/zgfx.c b/libfreerdp/codec/zgfx.c
> +index 20fbd354571..e260aa6e28a 100644
> +--- a/libfreerdp/codec/zgfx.c
> ++++ b/libfreerdp/codec/zgfx.c
> +@@ -230,19 +230,19 @@ static BOOL zgfx_decompress_segment(ZGFX_CONTEXT* zgfx, wStream* stream, size_t
> + 	BYTE* pbSegment;
> + 	size_t cbSegment;
> +
> +-	if (!zgfx || !stream)
> ++	if (!zgfx || !stream || (segmentSize < 2))
> + 		return FALSE;
> +
> + 	cbSegment = segmentSize - 1;
> +
> +-	if ((Stream_GetRemainingLength(stream) < segmentSize) || (segmentSize < 1) ||
> +-	    (segmentSize > UINT32_MAX))
> ++	if ((Stream_GetRemainingLength(stream) < segmentSize) || (segmentSize > UINT32_MAX))
> + 		return FALSE;
> +
> + 	Stream_Read_UINT8(stream, flags); /* header (1 byte) */
> + 	zgfx->OutputCount = 0;
> + 	pbSegment = Stream_Pointer(stream);
> +-	Stream_Seek(stream, cbSegment);
> ++	if (!Stream_SafeSeek(stream, cbSegment))
> ++		return FALSE;
> +
> + 	if (!(flags & PACKET_COMPRESSED))
> + 	{
> +@@ -346,6 +346,9 @@ static BOOL zgfx_decompress_segment(ZGFX_CONTEXT* zgfx, wStream* stream, size_t
> + 						if (count > sizeof(zgfx->OutputBuffer) - zgfx->OutputCount)
> + 							return FALSE;
> +
> ++						if (count > zgfx->cBitsRemaining / 8)
> ++							return FALSE;
> ++
> + 						CopyMemory(&(zgfx->OutputBuffer[zgfx->OutputCount]), zgfx->pbInputCurrent,
> + 						           count);
> + 						zgfx_history_buffer_ring_write(zgfx, zgfx->pbInputCurrent, count);
> diff --git a/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39318-39319.patch b/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39318-39319.patch
> new file mode 100644
> index 0000000000..76a9e00dd3
> --- /dev/null
> +++ b/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39318-39319.patch
> @@ -0,0 +1,41 @@
> +https://github.com/FreeRDP/FreeRDP/commit/80adde17ddc4b596ed1dae0922a0c54ab3d4b8ea
> +CVE: CVE-2022-39318 CVE-2022-39319
> +Upstream-Status: Backport
> +Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
> +
> +From 80adde17ddc4b596ed1dae0922a0c54ab3d4b8ea Mon Sep 17 00:00:00 2001
> +From: akallabeth <akallabeth@posteo.net>
> +Date: Thu, 13 Oct 2022 08:27:41 +0200
> +Subject: [PATCH] Fixed division by zero in urbdrc
> +
> +(cherry picked from commit 731f8419d04b481d7160de1f34062d630ed48765)
> +---
> + channels/urbdrc/client/libusb/libusb_udevice.c | 12 +++++++++---
> + 1 file changed, 9 insertions(+), 3 deletions(-)
> +
> +diff --git a/channels/urbdrc/client/libusb/libusb_udevice.c b/channels/urbdrc/client/libusb/libusb_udevice.c
> +index 505c31d7b55..ef87f195f38 100644
> +--- a/channels/urbdrc/client/libusb/libusb_udevice.c
> ++++ b/channels/urbdrc/client/libusb/libusb_udevice.c
> +@@ -1221,12 +1221,18 @@ static int libusb_udev_isoch_transfer(IUDEVICE* idev, URBDRC_CHANNEL_CALLBACK* c
> + 	if (!Buffer)
> + 		Stream_Seek(user_data->data, (NumberOfPackets * 12));
> +
> +-	iso_packet_size = BufferSize / NumberOfPackets;
> +-	iso_transfer = libusb_alloc_transfer(NumberOfPackets);
> ++	if (NumberOfPackets > 0)
> ++	{
> ++		iso_packet_size = BufferSize / NumberOfPackets;
> ++		iso_transfer = libusb_alloc_transfer((int)NumberOfPackets);
> ++	}
> +
> + 	if (iso_transfer == NULL)
> + 	{
> +-		WLog_Print(urbdrc->log, WLOG_ERROR, "Error: libusb_alloc_transfer.");
> ++		WLog_Print(urbdrc->log, WLOG_ERROR,
> ++		           "Error: libusb_alloc_transfer [NumberOfPackets=%" PRIu32 ", BufferSize=%" PRIu32
> ++		           " ]",
> ++		           NumberOfPackets, BufferSize);
> + 		async_transfer_user_data_free(user_data);
> + 		return -1;
> + 	}
> diff --git a/meta-oe/recipes-support/freerdp/freerdp_2.6.1.bb b/meta-oe/recipes-support/freerdp/freerdp_2.6.1.bb
> index ece2f56960..9da8b27c0d 100644
> --- a/meta-oe/recipes-support/freerdp/freerdp_2.6.1.bb
> +++ b/meta-oe/recipes-support/freerdp/freerdp_2.6.1.bb
> @@ -16,6 +16,8 @@ PKGV = "${GITPKGVTAG}"
>   SRCREV = "658a72980f6e93241d927c46cfa664bf2547b8b1"
>   SRC_URI = "git://github.com/FreeRDP/FreeRDP.git;branch=stable-2.0;protocol=https \
>       file://winpr-makecert-Build-with-install-RPATH.patch \
> +    file://CVE-2022-39316.patch \
> +    file://CVE-2022-39318-39319.patch \
>   "
>   
>   S = "${WORKDIR}/git"
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#102461): https://lists.openembedded.org/g/openembedded-devel/message/102461
> Mute This Topic: https://lists.openembedded.org/mt/98777251/3616698
> Group Owner: openembedded-devel+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [akuster808@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Lee, Chee Yang May 9, 2023, 2:25 p.m. UTC | #2
> +++++++++++++++++++
> >   .../freerdp/CVE-2022-39318-39319.patch        | 41 ++++++++++++++
> >   .../recipes-support/freerdp/freerdp_2.6.1.bb  |  2 +
> >   3 files changed, 96 insertions(+)
> >   create mode 100644 meta-oe/recipes-support/freerdp/freerdp/CVE-
> 2022-39316.patch
> >   create mode 100644
> > meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39318-39319.patch
> 
> Do these affect master or mickledore? Adding something like " Affects [<, <= ]
> {version} " would be helpful. I am tending 4 active branches and not having to
> checking  newer branches would be nice.

These is fixed in 2.9.0,  not affecting master and mickledore.
diff mbox series

Patch

diff --git a/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39316.patch b/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39316.patch
new file mode 100644
index 0000000000..a60b2854c8
--- /dev/null
+++ b/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39316.patch
@@ -0,0 +1,53 @@ 
+https://github.com/FreeRDP/FreeRDP/commit/e865c24efc40ebc52e75979c94cdd4ee2c1495b0
+CVE: CVE-2022-39316
+Upstream-Status: Backport
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+From e865c24efc40ebc52e75979c94cdd4ee2c1495b0 Mon Sep 17 00:00:00 2001
+From: akallabeth <akallabeth@posteo.net>
+Date: Thu, 13 Oct 2022 09:09:28 +0200
+Subject: [PATCH] Added missing length checks in zgfx_decompress_segment
+
+(cherry picked from commit 64716b335858109d14f27b51acc4c4d71a92a816)
+---
+ libfreerdp/codec/zgfx.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/libfreerdp/codec/zgfx.c b/libfreerdp/codec/zgfx.c
+index 20fbd354571..e260aa6e28a 100644
+--- a/libfreerdp/codec/zgfx.c
++++ b/libfreerdp/codec/zgfx.c
+@@ -230,19 +230,19 @@ static BOOL zgfx_decompress_segment(ZGFX_CONTEXT* zgfx, wStream* stream, size_t
+ 	BYTE* pbSegment;
+ 	size_t cbSegment;
+ 
+-	if (!zgfx || !stream)
++	if (!zgfx || !stream || (segmentSize < 2))
+ 		return FALSE;
+ 
+ 	cbSegment = segmentSize - 1;
+ 
+-	if ((Stream_GetRemainingLength(stream) < segmentSize) || (segmentSize < 1) ||
+-	    (segmentSize > UINT32_MAX))
++	if ((Stream_GetRemainingLength(stream) < segmentSize) || (segmentSize > UINT32_MAX))
+ 		return FALSE;
+ 
+ 	Stream_Read_UINT8(stream, flags); /* header (1 byte) */
+ 	zgfx->OutputCount = 0;
+ 	pbSegment = Stream_Pointer(stream);
+-	Stream_Seek(stream, cbSegment);
++	if (!Stream_SafeSeek(stream, cbSegment))
++		return FALSE;
+ 
+ 	if (!(flags & PACKET_COMPRESSED))
+ 	{
+@@ -346,6 +346,9 @@ static BOOL zgfx_decompress_segment(ZGFX_CONTEXT* zgfx, wStream* stream, size_t
+ 						if (count > sizeof(zgfx->OutputBuffer) - zgfx->OutputCount)
+ 							return FALSE;
+ 
++						if (count > zgfx->cBitsRemaining / 8)
++							return FALSE;
++
+ 						CopyMemory(&(zgfx->OutputBuffer[zgfx->OutputCount]), zgfx->pbInputCurrent,
+ 						           count);
+ 						zgfx_history_buffer_ring_write(zgfx, zgfx->pbInputCurrent, count);
diff --git a/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39318-39319.patch b/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39318-39319.patch
new file mode 100644
index 0000000000..76a9e00dd3
--- /dev/null
+++ b/meta-oe/recipes-support/freerdp/freerdp/CVE-2022-39318-39319.patch
@@ -0,0 +1,41 @@ 
+https://github.com/FreeRDP/FreeRDP/commit/80adde17ddc4b596ed1dae0922a0c54ab3d4b8ea
+CVE: CVE-2022-39318 CVE-2022-39319
+Upstream-Status: Backport
+Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
+
+From 80adde17ddc4b596ed1dae0922a0c54ab3d4b8ea Mon Sep 17 00:00:00 2001
+From: akallabeth <akallabeth@posteo.net>
+Date: Thu, 13 Oct 2022 08:27:41 +0200
+Subject: [PATCH] Fixed division by zero in urbdrc
+
+(cherry picked from commit 731f8419d04b481d7160de1f34062d630ed48765)
+---
+ channels/urbdrc/client/libusb/libusb_udevice.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/channels/urbdrc/client/libusb/libusb_udevice.c b/channels/urbdrc/client/libusb/libusb_udevice.c
+index 505c31d7b55..ef87f195f38 100644
+--- a/channels/urbdrc/client/libusb/libusb_udevice.c
++++ b/channels/urbdrc/client/libusb/libusb_udevice.c
+@@ -1221,12 +1221,18 @@ static int libusb_udev_isoch_transfer(IUDEVICE* idev, URBDRC_CHANNEL_CALLBACK* c
+ 	if (!Buffer)
+ 		Stream_Seek(user_data->data, (NumberOfPackets * 12));
+ 
+-	iso_packet_size = BufferSize / NumberOfPackets;
+-	iso_transfer = libusb_alloc_transfer(NumberOfPackets);
++	if (NumberOfPackets > 0)
++	{
++		iso_packet_size = BufferSize / NumberOfPackets;
++		iso_transfer = libusb_alloc_transfer((int)NumberOfPackets);
++	}
+ 
+ 	if (iso_transfer == NULL)
+ 	{
+-		WLog_Print(urbdrc->log, WLOG_ERROR, "Error: libusb_alloc_transfer.");
++		WLog_Print(urbdrc->log, WLOG_ERROR,
++		           "Error: libusb_alloc_transfer [NumberOfPackets=%" PRIu32 ", BufferSize=%" PRIu32
++		           " ]",
++		           NumberOfPackets, BufferSize);
+ 		async_transfer_user_data_free(user_data);
+ 		return -1;
+ 	}
diff --git a/meta-oe/recipes-support/freerdp/freerdp_2.6.1.bb b/meta-oe/recipes-support/freerdp/freerdp_2.6.1.bb
index ece2f56960..9da8b27c0d 100644
--- a/meta-oe/recipes-support/freerdp/freerdp_2.6.1.bb
+++ b/meta-oe/recipes-support/freerdp/freerdp_2.6.1.bb
@@ -16,6 +16,8 @@  PKGV = "${GITPKGVTAG}"
 SRCREV = "658a72980f6e93241d927c46cfa664bf2547b8b1"
 SRC_URI = "git://github.com/FreeRDP/FreeRDP.git;branch=stable-2.0;protocol=https \
     file://winpr-makecert-Build-with-install-RPATH.patch \
+    file://CVE-2022-39316.patch \
+    file://CVE-2022-39318-39319.patch \
 "
 
 S = "${WORKDIR}/git"