diff -u xorg-server-hwe-18.04-1.20.8/debian/changelog xorg-server-hwe-18.04-1.20.8/debian/changelog --- xorg-server-hwe-18.04-1.20.8/debian/changelog +++ xorg-server-hwe-18.04-1.20.8/debian/changelog @@ -1,3 +1,20 @@ +xorg-server-hwe-18.04 (2:1.20.8-2ubuntu2.2~18.04.6) bionic-security; urgency=medium + + * SECURITY UPDATE: SProcRenderCompositeGlyphs out-of-bounds access + - debian/patches/CVE-2021-4008.patch: check lengths in render/render.c. + - CVE-2021-4008 + * SECURITY UPDATE: SProcXFixesCreatePointerBarrier out-of-bounds access + - debian/patches/CVE-2021-4009.patch: use sizes in xfixes/cursor.c. + - CVE-2021-4009 + * SECURITY UPDATE: SProcScreenSaverSuspend out-of-bounds access + - debian/patches/CVE-2021-4010.patch: fix logic in Xext/saver.c. + - CVE-2021-4010 + * SECURITY UPDATE: SwapCreateRegister out-of-bounds access + - debian/patches/CVE-2021-4011.patch: fix length in record/record.c. + - CVE-2021-4011 + + -- Marc Deslauriers Tue, 14 Dec 2021 09:34:57 -0500 + xorg-server-hwe-18.04 (2:1.20.8-2ubuntu2.2~18.04.5) bionic-security; urgency=medium * SECURITY UPDATE: XChangeFeedbackControl Integer Underflow diff -u xorg-server-hwe-18.04-1.20.8/debian/patches/series xorg-server-hwe-18.04-1.20.8/debian/patches/series --- xorg-server-hwe-18.04-1.20.8/debian/patches/series +++ xorg-server-hwe-18.04-1.20.8/debian/patches/series @@ -39,0 +40,4 @@ +CVE-2021-4008.patch +CVE-2021-4009.patch +CVE-2021-4010.patch +CVE-2021-4011.patch only in patch2: unchanged: --- xorg-server-hwe-18.04-1.20.8.orig/debian/patches/CVE-2021-4008.patch +++ xorg-server-hwe-18.04-1.20.8/debian/patches/CVE-2021-4008.patch @@ -0,0 +1,52 @@ +From ebce7e2d80e7c80e1dda60f2f0bc886f1106ba60 Mon Sep 17 00:00:00 2001 +From: Povilas Kanapickas +Date: Tue, 14 Dec 2021 15:00:03 +0200 +Subject: [PATCH] render: Fix out of bounds access in + SProcRenderCompositeGlyphs() + +ZDI-CAN-14192, CVE-2021-4008 + +This vulnerability was discovered and the fix was suggested by: +Jan-Niklas Sohn working with Trend Micro Zero Day Initiative + +Signed-off-by: Povilas Kanapickas +--- + render/render.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/render/render.c b/render/render.c +index c376090ca..456f156d4 100644 +--- a/render/render.c ++++ b/render/render.c +@@ -2309,6 +2309,9 @@ SProcRenderCompositeGlyphs(ClientPtr client) + + i = elt->len; + if (i == 0xff) { ++ if (buffer + 4 > end) { ++ return BadLength; ++ } + swapl((int *) buffer); + buffer += 4; + } +@@ -2319,12 +2322,18 @@ SProcRenderCompositeGlyphs(ClientPtr client) + buffer += i; + break; + case 2: ++ if (buffer + i * 2 > end) { ++ return BadLength; ++ } + while (i--) { + swaps((short *) buffer); + buffer += 2; + } + break; + case 4: ++ if (buffer + i * 4 > end) { ++ return BadLength; ++ } + while (i--) { + swapl((int *) buffer); + buffer += 4; +-- +GitLab + only in patch2: unchanged: --- xorg-server-hwe-18.04-1.20.8.orig/debian/patches/CVE-2021-4009.patch +++ xorg-server-hwe-18.04-1.20.8/debian/patches/CVE-2021-4009.patch @@ -0,0 +1,43 @@ +From b5196750099ae6ae582e1f46bd0a6dad29550e02 Mon Sep 17 00:00:00 2001 +From: Povilas Kanapickas +Date: Tue, 14 Dec 2021 15:00:01 +0200 +Subject: [PATCH] xfixes: Fix out of bounds access in + *ProcXFixesCreatePointerBarrier() + +ZDI-CAN-14950, CVE-2021-4009 + +This vulnerability was discovered and the fix was suggested by: +Jan-Niklas Sohn working with Trend Micro Zero Day Initiative + +Signed-off-by: Povilas Kanapickas +--- + xfixes/cursor.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/xfixes/cursor.c b/xfixes/cursor.c +index 60580b88f..c5d4554b2 100644 +--- a/xfixes/cursor.c ++++ b/xfixes/cursor.c +@@ -1010,7 +1010,8 @@ ProcXFixesCreatePointerBarrier(ClientPtr client) + { + REQUEST(xXFixesCreatePointerBarrierReq); + +- REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, pad_to_int32(stuff->num_devices)); ++ REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, ++ pad_to_int32(stuff->num_devices * sizeof(CARD16))); + LEGAL_NEW_RESOURCE(stuff->barrier, client); + + return XICreatePointerBarrier(client, stuff); +@@ -1027,7 +1028,8 @@ SProcXFixesCreatePointerBarrier(ClientPtr client) + + swaps(&stuff->length); + swaps(&stuff->num_devices); +- REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, pad_to_int32(stuff->num_devices)); ++ REQUEST_FIXED_SIZE(xXFixesCreatePointerBarrierReq, ++ pad_to_int32(stuff->num_devices * sizeof(CARD16))); + + swapl(&stuff->barrier); + swapl(&stuff->window); +-- +GitLab + only in patch2: unchanged: --- xorg-server-hwe-18.04-1.20.8.orig/debian/patches/CVE-2021-4010.patch +++ xorg-server-hwe-18.04-1.20.8/debian/patches/CVE-2021-4010.patch @@ -0,0 +1,32 @@ +From 6c4c53010772e3cb4cb8acd54950c8eec9c00d21 Mon Sep 17 00:00:00 2001 +From: Povilas Kanapickas +Date: Tue, 14 Dec 2021 15:00:02 +0200 +Subject: [PATCH] Xext: Fix out of bounds access in SProcScreenSaverSuspend() + +ZDI-CAN-14951, CVE-2021-4010 + +This vulnerability was discovered and the fix was suggested by: +Jan-Niklas Sohn working with Trend Micro Zero Day Initiative + +Signed-off-by: Povilas Kanapickas +--- + Xext/saver.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Xext/saver.c b/Xext/saver.c +index 1d7e3cadf..f813ba08d 100644 +--- a/Xext/saver.c ++++ b/Xext/saver.c +@@ -1351,8 +1351,8 @@ SProcScreenSaverSuspend(ClientPtr client) + REQUEST(xScreenSaverSuspendReq); + + swaps(&stuff->length); +- swapl(&stuff->suspend); + REQUEST_SIZE_MATCH(xScreenSaverSuspendReq); ++ swapl(&stuff->suspend); + return ProcScreenSaverSuspend(client); + } + +-- +GitLab + only in patch2: unchanged: --- xorg-server-hwe-18.04-1.20.8.orig/debian/patches/CVE-2021-4011.patch +++ xorg-server-hwe-18.04-1.20.8/debian/patches/CVE-2021-4011.patch @@ -0,0 +1,28 @@ +From e56f61c79fc3cee26d83cda0f84ae56d5979f768 Mon Sep 17 00:00:00 2001 +From: Povilas Kanapickas +Date: Tue, 14 Dec 2021 15:00:00 +0200 +Subject: [PATCH] record: Fix out of bounds access in SwapCreateRegister() + +ZDI-CAN-14952, CVE-2021-4011 + +This vulnerability was discovered and the fix was suggested by: +Jan-Niklas Sohn working with Trend Micro Zero Day Initiative + +Signed-off-by: Povilas Kanapickas +--- + record/record.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/record/record.c ++++ b/record/record.c +@@ -2515,8 +2515,8 @@ SwapCreateRegister(ClientPtr client, xRe + swapl(pClientID); + } + if (stuff->nRanges > +- client->req_len - bytes_to_int32(sz_xRecordRegisterClientsReq) +- - stuff->nClients) ++ (client->req_len - bytes_to_int32(sz_xRecordRegisterClientsReq) ++ - stuff->nClients) / bytes_to_int32(sz_xRecordRange)) + return BadLength; + RecordSwapRanges((xRecordRange *) pClientID, stuff->nRanges); + return Success;