Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions SPECS/xorg-x11-server-Xwayland/CVE-2025-62229.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
From 4709ce7356134824a8cca6e8164926c35958f9c2 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <[email protected]>
Date: Wed, 2 Jul 2025 09:46:22 +0200
Subject: [PATCH] present: Fix use-after-free in present_create_notifies()

Using the Present extension, if an error occurs while processing and
adding the notifications after presenting a pixmap, the function
present_create_notifies() will clean up and remove the notifications
it added.

However, there are two different code paths that can lead to an error
creating the notify, one being before the notify is being added to the
list, and another one after the notify is added.

When the error occurs before it's been added, it removes the elements up
to the last added element, instead of the actual number of elements
which were added.

As a result, in case of error, as with an invalid window for example, it
leaves a dangling pointer to the last element, leading to a use after
free case later:

| Invalid write of size 8
| at 0x5361D5: present_clear_window_notifies (present_notify.c:42)
| by 0x534A56: present_destroy_window (present_screen.c:107)
| by 0x41E441: xwl_destroy_window (xwayland-window.c:1959)
| by 0x4F9EC9: compDestroyWindow (compwindow.c:622)
| by 0x51EAC4: damageDestroyWindow (damage.c:1592)
| by 0x4FDC29: DbeDestroyWindow (dbe.c:1291)
| by 0x4EAC55: FreeWindowResources (window.c:1023)
| by 0x4EAF59: DeleteWindow (window.c:1091)
| by 0x4DE59A: doFreeResource (resource.c:890)
| by 0x4DEFB2: FreeClientResources (resource.c:1156)
| by 0x4A9AFB: CloseDownClient (dispatch.c:3567)
| by 0x5DCC78: ClientReady (connection.c:603)
| Address 0x16126200 is 16 bytes inside a block of size 2,048 free'd
| at 0x4841E43: free (vg_replace_malloc.c:989)
| by 0x5363DD: present_destroy_notifies (present_notify.c:111)
| by 0x53638D: present_create_notifies (present_notify.c:100)
| by 0x5368E9: proc_present_pixmap_common (present_request.c:164)
| by 0x536A7D: proc_present_pixmap (present_request.c:189)
| by 0x536FA9: proc_present_dispatch (present_request.c:337)
| by 0x4A1E4E: Dispatch (dispatch.c:561)
| by 0x4B00F1: dix_main (main.c:284)
| by 0x42879D: main (stubmain.c:34)
| Block was alloc'd at
| at 0x48463F3: calloc (vg_replace_malloc.c:1675)
| by 0x5362A1: present_create_notifies (present_notify.c:81)
| by 0x5368E9: proc_present_pixmap_common (present_request.c:164)
| by 0x536A7D: proc_present_pixmap (present_request.c:189)
| by 0x536FA9: proc_present_dispatch (present_request.c:337)
| by 0x4A1E4E: Dispatch (dispatch.c:561)
| by 0x4B00F1: dix_main (main.c:284)
| by 0x42879D: main (stubmain.c:34)

To fix the issue, count and remove the actual number of notify elements
added in case of error.

CVE-2025-62229, ZDI-CAN-27238

This vulnerability was discovered by:
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative

Signed-off-by: Olivier Fourdan <[email protected]>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2086>
Signed-off-by: rpm-build <rpm-build>
Upstream-reference: https://gitlab.freedesktop.org/xorg/xserver/-/commit/5a4286b1.patch
---
present/present_notify.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/present/present_notify.c b/present/present_notify.c
index 4459549..00b3b68 100644
--- a/present/present_notify.c
+++ b/present/present_notify.c
@@ -90,7 +90,7 @@ present_create_notifies(ClientPtr client, int num_notifies, xPresentNotify *x_no
if (status != Success)
goto bail;

- added = i;
+ added++;
}
return Success;

--
2.45.4

49 changes: 49 additions & 0 deletions SPECS/xorg-x11-server-Xwayland/CVE-2025-62231.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
From 3fdbcd0412bca5cf3eb20831b17ea1a9742c2c0b Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <[email protected]>
Date: Wed, 10 Sep 2025 16:30:29 +0200
Subject: [PATCH] xkb: Prevent overflow in XkbSetCompatMap()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The XkbCompatMap structure stores its "num_si" and "size_si" fields
using an unsigned short.

However, the function _XkbSetCompatMap() will store the sum of the
input data "firstSI" and "nSI" in both XkbCompatMap's "num_si" and
"size_si" without first checking if the sum overflows the maximum
unsigned short value, leading to a possible overflow.

To avoid the issue, check whether the sum does not exceed the maximum
unsigned short value, or return a "BadValue" error otherwise.

CVE-2025-62231, ZDI-CAN-27560

This vulnerability was discovered by:
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative

Signed-off-by: Olivier Fourdan <[email protected]>
Reviewed-by: Michel Dänzer <[email protected]>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2086>
Signed-off-by: rpm-build <rpm-build>
Upstream-reference: https://gitlab.freedesktop.org/xorg/xserver/-/commit/475d9f49.patch
---
xkb/xkb.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/xkb/xkb.c b/xkb/xkb.c
index ac154e2..924dfec 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -2990,6 +2990,8 @@ _XkbSetCompatMap(ClientPtr client, DeviceIntPtr dev,
XkbSymInterpretPtr sym;
unsigned int skipped = 0;

+ if ((unsigned) (req->firstSI + req->nSI) > USHRT_MAX)
+ return BadValue;
if ((unsigned) (req->firstSI + req->nSI) > compat->size_si) {
compat->num_si = compat->size_si = req->firstSI + req->nSI;
compat->sym_interpret = reallocarray(compat->sym_interpret,
--
2.45.4

7 changes: 6 additions & 1 deletion SPECS/xorg-x11-server-Xwayland/xorg-x11-server-Xwayland.spec
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Distribution: Azure Linux
Summary: Xwayland
Name: xorg-x11-server-Xwayland
Version: 24.1.6
Release: 2%{?dist}
Release: 3%{?dist}

License: MIT
URL: http://www.x.org
Expand Down Expand Up @@ -93,6 +93,8 @@ Patch1: CVE-2025-49177.patch
Patch2: CVE-2025-49178.patch
Patch3: CVE-2025-49179.patch
Patch4: CVE-2025-49180.patch
Patch5: CVE-2025-62229.patch
Patch6: CVE-2025-62231.patch

%description
Xwayland is an X server for running X clients under Wayland.
Expand Down Expand Up @@ -143,6 +145,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%{_libdir}/pkgconfig/xwayland.pc

%changelog
* Sun Nov 02 2025 Azure Linux Security Servicing Account <[email protected]> - 24.1.6-3
- Patch for CVE-2025-62231, CVE-2025-62229

* Mon Jun 23 2025 Kevin Lockwood <[email protected]> - 24.1.6-2
- Add patch for CVE-2025-49175
- Add patch for CVE-2025-49177
Expand Down
Loading