xserver/Xext/present
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Peter Hutterer 5d3b8520ec present: unlink notifies from window list in present_clear_window_notifies
When a window is destroyed, present_clear_window_notifies()
does not remove the notify list node from the window. The notify
may then be freed as part of the window_priv, leaving dangling
pointers in place.

When the vblank owning the notify is later torn down,
present_free_window_notify() calls xorg_list_del() which
writes through these dangling pointers (use-after-free write).

This happens when Present cross-window notifies are used: a
PresentPixmap on window A can reference window B as a notify target.
An untriggered wait_fence keeps the vblank alive so that B can be
destroyed first, creating the dangling-pointer window.

Fix this by calling the free function we have (and moving the window
reset into that function too). present_clear_window_notifies is only
called from one place anyway.

This vulnerability was discovered by:
  Anonymous working with TrendAI Zero Day Initiative

ZDI-CAN-31830

CVE-2026-93515

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Assisted-by: Claude:claude-opus-4-6
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2341>
(cherry picked from commit 1b6955c310)
2026-10-20 19:49:20 +02:00
..
meson.build present: move it under Xext/ 2026-06-16 19:18:39 +02:00
present.c randr: move it under Xext/ 2026-06-17 10:59:48 +02:00
present_event.c Xext: geext: move it into its own subdir 2026-06-18 14:07:18 +02:00
present_execute.c present: move it under Xext/ 2026-06-16 19:18:39 +02:00
present_fake.c present: move it under Xext/ 2026-06-16 19:18:39 +02:00
present_fence.c present: move it under Xext/ 2026-06-16 19:18:39 +02:00
present_notify.c present: unlink notifies from window list in present_clear_window_notifies 2026-10-20 19:49:20 +02:00
present_priv.h present: rename wrap()/unwrap() macros and move them into their only consumer. 2026-06-25 15:04:38 +02:00
present_request.c present: parentheses around macro argument symbols 2026-06-25 07:37:23 +02:00
present_scmd.c present: Get rid of blank "present_execute()" declaration. 2026-10-13 14:16:11 +02:00
present_screen.c Xext/present: Copy the present info struct instead of just the pointer 2026-08-19 10:43:54 +02:00
present_vblank.c present: move it under Xext/ 2026-06-16 19:18:39 +02:00