!242 [sync] PR-235: fix CVE-2024-31080 CVE-2024-31081 CVE-2024-31082 CVE-2024-31083
From: @openeuler-sync-bot Reviewed-by: @t_feng Signed-off-by: @t_feng
This commit is contained in:
commit
63a9359b11
48
backport-CVE-2024-31080.patch
Normal file
48
backport-CVE-2024-31080.patch
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
From 96798fc1967491c80a4d0c8d9e0a80586cb2152b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||||
|
Date: Fri, 22 Mar 2024 18:51:45 -0700
|
||||||
|
Subject: [PATCH] Xi: ProcXIGetSelectedEvents needs to use unswapped length to
|
||||||
|
send reply
|
||||||
|
|
||||||
|
CVE-2024-31080
|
||||||
|
|
||||||
|
Reported-by: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=69762
|
||||||
|
Fixes: 53e821ab4 ("Xi: add request processing for XIGetSelectedEvents.")
|
||||||
|
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||||
|
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1463>
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://gitlab.freedesktop.org/xorg/xserver/-/commit/96798fc1967491c80a4d0c8d9e0a80586cb2152b
|
||||||
|
---
|
||||||
|
Xi/xiselectev.c | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c
|
||||||
|
index edcb8a0d36..ac14949871 100644
|
||||||
|
--- a/Xi/xiselectev.c
|
||||||
|
+++ b/Xi/xiselectev.c
|
||||||
|
@@ -349,6 +349,7 @@ ProcXIGetSelectedEvents(ClientPtr client)
|
||||||
|
InputClientsPtr others = NULL;
|
||||||
|
xXIEventMask *evmask = NULL;
|
||||||
|
DeviceIntPtr dev;
|
||||||
|
+ uint32_t length;
|
||||||
|
|
||||||
|
REQUEST(xXIGetSelectedEventsReq);
|
||||||
|
REQUEST_SIZE_MATCH(xXIGetSelectedEventsReq);
|
||||||
|
@@ -418,10 +419,12 @@ ProcXIGetSelectedEvents(ClientPtr client)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* save the value before SRepXIGetSelectedEvents swaps it */
|
||||||
|
+ length = reply.length;
|
||||||
|
WriteReplyToClient(client, sizeof(xXIGetSelectedEventsReply), &reply);
|
||||||
|
|
||||||
|
if (reply.num_masks)
|
||||||
|
- WriteToClient(client, reply.length * 4, buffer);
|
||||||
|
+ WriteToClient(client, length * 4, buffer);
|
||||||
|
|
||||||
|
free(buffer);
|
||||||
|
return Success;
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
||||||
46
backport-CVE-2024-31081.patch
Normal file
46
backport-CVE-2024-31081.patch
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
From 3e77295f888c67fc7645db5d0c00926a29ffecee Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||||
|
Date: Fri, 22 Mar 2024 18:56:27 -0700
|
||||||
|
Subject: [PATCH] Xi: ProcXIPassiveGrabDevice needs to use unswapped length to
|
||||||
|
send reply
|
||||||
|
|
||||||
|
CVE-2024-31081
|
||||||
|
|
||||||
|
Fixes: d220d6907 ("Xi: add GrabButton and GrabKeysym code.")
|
||||||
|
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||||
|
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1463>
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://gitlab.freedesktop.org/xorg/xserver/-/commit/3e77295f888c67fc7645db5d0c00926a29ffecee
|
||||||
|
---
|
||||||
|
Xi/xipassivegrab.c | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c
|
||||||
|
index c9ac2f8553..896233bec2 100644
|
||||||
|
--- a/Xi/xipassivegrab.c
|
||||||
|
+++ b/Xi/xipassivegrab.c
|
||||||
|
@@ -93,6 +93,7 @@ ProcXIPassiveGrabDevice(ClientPtr client)
|
||||||
|
GrabParameters param;
|
||||||
|
void *tmp;
|
||||||
|
int mask_len;
|
||||||
|
+ uint32_t length;
|
||||||
|
|
||||||
|
REQUEST(xXIPassiveGrabDeviceReq);
|
||||||
|
REQUEST_FIXED_SIZE(xXIPassiveGrabDeviceReq,
|
||||||
|
@@ -247,9 +248,11 @@ ProcXIPassiveGrabDevice(ClientPtr client)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* save the value before SRepXIPassiveGrabDevice swaps it */
|
||||||
|
+ length = rep.length;
|
||||||
|
WriteReplyToClient(client, sizeof(rep), &rep);
|
||||||
|
if (rep.num_modifiers)
|
||||||
|
- WriteToClient(client, rep.length * 4, modifiers_failed);
|
||||||
|
+ WriteToClient(client, length * 4, modifiers_failed);
|
||||||
|
|
||||||
|
out:
|
||||||
|
free(modifiers_failed);
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
||||||
50
backport-CVE-2024-31082.patch
Normal file
50
backport-CVE-2024-31082.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 6c684d035c06fd41c727f0ef0744517580864cef Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||||
|
Date: Fri, 22 Mar 2024 19:07:34 -0700
|
||||||
|
Subject: [PATCH] Xquartz: ProcAppleDRICreatePixmap needs to use unswapped
|
||||||
|
length to send reply
|
||||||
|
|
||||||
|
CVE-2024-31082
|
||||||
|
|
||||||
|
Fixes: 14205ade0 ("XQuartz: appledri: Fix byte swapping in replies")
|
||||||
|
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||||
|
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1463>
|
||||||
|
|
||||||
|
Conflict:NA
|
||||||
|
Reference:https://gitlab.freedesktop.org/xorg/xserver/-/commit/6c684d035c06fd41c727f0ef0744517580864cef
|
||||||
|
---
|
||||||
|
hw/xquartz/xpr/appledri.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/hw/xquartz/xpr/appledri.c b/hw/xquartz/xpr/appledri.c
|
||||||
|
index 77574655b2..40422b61a9 100644
|
||||||
|
--- a/hw/xquartz/xpr/appledri.c
|
||||||
|
+++ b/hw/xquartz/xpr/appledri.c
|
||||||
|
@@ -272,6 +272,7 @@ ProcAppleDRICreatePixmap(ClientPtr client)
|
||||||
|
xAppleDRICreatePixmapReply rep;
|
||||||
|
int width, height, pitch, bpp;
|
||||||
|
void *ptr;
|
||||||
|
+ CARD32 stringLength;
|
||||||
|
|
||||||
|
REQUEST_SIZE_MATCH(xAppleDRICreatePixmapReq);
|
||||||
|
|
||||||
|
@@ -307,6 +308,7 @@ ProcAppleDRICreatePixmap(ClientPtr client)
|
||||||
|
if (sizeof(rep) != sz_xAppleDRICreatePixmapReply)
|
||||||
|
ErrorF("error sizeof(rep) is %zu\n", sizeof(rep));
|
||||||
|
|
||||||
|
+ stringLength = rep.stringLength; /* save unswapped value */
|
||||||
|
if (client->swapped) {
|
||||||
|
swaps(&rep.sequenceNumber);
|
||||||
|
swapl(&rep.length);
|
||||||
|
@@ -319,7 +321,7 @@ ProcAppleDRICreatePixmap(ClientPtr client)
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteToClient(client, sizeof(rep), &rep);
|
||||||
|
- WriteToClient(client, rep.stringLength, path);
|
||||||
|
+ WriteToClient(client, stringLength, path);
|
||||||
|
|
||||||
|
return Success;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
||||||
115
backport-CVE-2024-31083.patch
Normal file
115
backport-CVE-2024-31083.patch
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
From bdca6c3d1f5057eeb31609b1280fc93237b00c77 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Date: Tue, 30 Jan 2024 13:13:35 +1000
|
||||||
|
Subject: [PATCH] render: fix refcounting of glyphs during ProcRenderAddGlyphs
|
||||||
|
|
||||||
|
Previously, AllocateGlyph would return a new glyph with refcount=0 and a
|
||||||
|
re-used glyph would end up not changing the refcount at all. The
|
||||||
|
resulting glyph_new array would thus have multiple entries pointing to
|
||||||
|
the same non-refcounted glyphs.
|
||||||
|
|
||||||
|
AddGlyph may free a glyph, resulting in a UAF when the same glyph
|
||||||
|
pointer is then later used.
|
||||||
|
|
||||||
|
Fix this by returning a refcount of 1 for a new glyph and always
|
||||||
|
incrementing the refcount for a re-used glyph, followed by dropping that
|
||||||
|
refcount back down again when we're done with it.
|
||||||
|
|
||||||
|
CVE-2024-31083, ZDI-CAN-22880
|
||||||
|
|
||||||
|
This vulnerability was discovered by:
|
||||||
|
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
|
||||||
|
|
||||||
|
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1463>
|
||||||
|
|
||||||
|
Conflict: render/glyphstr_priv.h => render/glyphstr.h and void FreeGlyph(GlyphPtr glyph, int format) => extern void FreeGlyph(GlyphPtr glyph, int format)
|
||||||
|
Reference:https://gitlab.freedesktop.org/xorg/xserver/-/commit/bdca6c3d1f5057eeb31609b1280fc93237b00c77
|
||||||
|
---
|
||||||
|
render/glyph.c | 5 +-
|
||||||
|
render/glyphstr.h | 1 +
|
||||||
|
render/render.c | 15 +++--
|
||||||
|
3 files changed, 15 insertions(+), 6 deletions(-)
|
||||||
|
create mode 100644 render/glyphstr.h.orig
|
||||||
|
|
||||||
|
diff --git a/render/glyph.c b/render/glyph.c
|
||||||
|
index f3ed9cf..d5fc5f3 100644
|
||||||
|
--- a/render/glyph.c
|
||||||
|
+++ b/render/glyph.c
|
||||||
|
@@ -245,10 +245,11 @@ FreeGlyphPicture(GlyphPtr glyph)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void
|
||||||
|
+void
|
||||||
|
FreeGlyph(GlyphPtr glyph, int format)
|
||||||
|
{
|
||||||
|
CheckDuplicates(&globalGlyphs[format], "FreeGlyph");
|
||||||
|
+ BUG_RETURN(glyph->refcnt == 0);
|
||||||
|
if (--glyph->refcnt == 0) {
|
||||||
|
GlyphRefPtr gr;
|
||||||
|
int i;
|
||||||
|
@@ -354,7 +355,7 @@ AllocateGlyph(xGlyphInfo * gi, int fdepth)
|
||||||
|
glyph = (GlyphPtr) malloc(size);
|
||||||
|
if (!glyph)
|
||||||
|
return 0;
|
||||||
|
- glyph->refcnt = 0;
|
||||||
|
+ glyph->refcnt = 1;
|
||||||
|
glyph->size = size + sizeof(xGlyphInfo);
|
||||||
|
glyph->info = *gi;
|
||||||
|
dixInitPrivates(glyph, (char *) glyph + head_size, PRIVATE_GLYPH);
|
||||||
|
diff --git a/render/glyphstr.h b/render/glyphstr.h
|
||||||
|
index 2f51bd2..3b1d806 100644
|
||||||
|
--- a/render/glyphstr.h
|
||||||
|
+++ b/render/glyphstr.h
|
||||||
|
@@ -108,6 +108,7 @@ extern Bool
|
||||||
|
extern GlyphPtr FindGlyph(GlyphSetPtr glyphSet, Glyph id);
|
||||||
|
|
||||||
|
extern GlyphPtr AllocateGlyph(xGlyphInfo * gi, int format);
|
||||||
|
+extern void FreeGlyph(GlyphPtr glyph, int format);
|
||||||
|
|
||||||
|
extern Bool
|
||||||
|
ResizeGlyphSet(GlyphSetPtr glyphSet, CARD32 change);
|
||||||
|
diff --git a/render/render.c b/render/render.c
|
||||||
|
index 456f156..5bc2a20 100644
|
||||||
|
--- a/render/render.c
|
||||||
|
+++ b/render/render.c
|
||||||
|
@@ -1076,6 +1076,7 @@ ProcRenderAddGlyphs(ClientPtr client)
|
||||||
|
|
||||||
|
if (glyph_new->glyph && glyph_new->glyph != DeletedGlyph) {
|
||||||
|
glyph_new->found = TRUE;
|
||||||
|
+ ++glyph_new->glyph->refcnt;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GlyphPtr glyph;
|
||||||
|
@@ -1168,8 +1169,10 @@ ProcRenderAddGlyphs(ClientPtr client)
|
||||||
|
err = BadAlloc;
|
||||||
|
goto bail;
|
||||||
|
}
|
||||||
|
- for (i = 0; i < nglyphs; i++)
|
||||||
|
+ for (i = 0; i < nglyphs; i++) {
|
||||||
|
AddGlyph(glyphSet, glyphs[i].glyph, glyphs[i].id);
|
||||||
|
+ FreeGlyph(glyphs[i].glyph, glyphSet->fdepth);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (glyphsBase != glyphsLocal)
|
||||||
|
free(glyphsBase);
|
||||||
|
@@ -1179,9 +1182,13 @@ ProcRenderAddGlyphs(ClientPtr client)
|
||||||
|
FreePicture((void *) pSrc, 0);
|
||||||
|
if (pSrcPix)
|
||||||
|
FreeScratchPixmapHeader(pSrcPix);
|
||||||
|
- for (i = 0; i < nglyphs; i++)
|
||||||
|
- if (glyphs[i].glyph && !glyphs[i].found)
|
||||||
|
- free(glyphs[i].glyph);
|
||||||
|
+ for (i = 0; i < nglyphs; i++) {
|
||||||
|
+ if (glyphs[i].glyph) {
|
||||||
|
+ --glyphs[i].glyph->refcnt;
|
||||||
|
+ if (!glyphs[i].found)
|
||||||
|
+ free(glyphs[i].glyph);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
if (glyphsBase != glyphsLocal)
|
||||||
|
free(glyphsBase);
|
||||||
|
return err;
|
||||||
|
--
|
||||||
|
2.43.0
|
||||||
|
|
||||||
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
Name: xorg-x11-server
|
Name: xorg-x11-server
|
||||||
Version: 1.20.11
|
Version: 1.20.11
|
||||||
Release: 28
|
Release: 29
|
||||||
Summary: X.Org X11 X server
|
Summary: X.Org X11 X server
|
||||||
License: MIT and GPLv2
|
License: MIT and GPLv2
|
||||||
URL: https://www.x.org
|
URL: https://www.x.org
|
||||||
@ -119,6 +119,10 @@ Patch6033: backport-0001-CVE-2024-0229.patch
|
|||||||
Patch6034: backport-0002-CVE-2024-0229.patch
|
Patch6034: backport-0002-CVE-2024-0229.patch
|
||||||
Patch6035: backport-0003-CVE-2024-0229.patch
|
Patch6035: backport-0003-CVE-2024-0229.patch
|
||||||
Patch6036: fix-segfault-if-CreateGC-failed-in-XaceHook.patch
|
Patch6036: fix-segfault-if-CreateGC-failed-in-XaceHook.patch
|
||||||
|
Patch6037: backport-CVE-2024-31080.patch
|
||||||
|
Patch6038: backport-CVE-2024-31081.patch
|
||||||
|
Patch6039: backport-CVE-2024-31082.patch
|
||||||
|
Patch6040: backport-CVE-2024-31083.patch
|
||||||
|
|
||||||
BuildRequires: audit-libs-devel autoconf automake bison dbus-devel flex git gcc
|
BuildRequires: audit-libs-devel autoconf automake bison dbus-devel flex git gcc
|
||||||
BuildRequires: systemtap-sdt-devel libtool pkgconfig
|
BuildRequires: systemtap-sdt-devel libtool pkgconfig
|
||||||
@ -460,6 +464,9 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete
|
|||||||
%{_mandir}/man*/*
|
%{_mandir}/man*/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Apr 7 2024 yanglu <yanglu72@h-partners.com> -1.20.11-29
|
||||||
|
- fix CVE-2024-31080 CVE-2024-31081 CVE-2024-31082 CVE-2024-31083
|
||||||
|
|
||||||
* Wed Feb 28 2024 zhangliangpengkun<zhangliangpengkun@xfusion.com> - 1.20.11-28
|
* Wed Feb 28 2024 zhangliangpengkun<zhangliangpengkun@xfusion.com> - 1.20.11-28
|
||||||
- fix changelog The CVE is should be CVE-2023-6816.
|
- fix changelog The CVE is should be CVE-2023-6816.
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user