xserver/present
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Peter Hutterer 389ea39a20 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-17 18:59:14 +02:00
..
meson.build treewide: remove "lib" prefix in static_library names (meson) 2025-07-03 12:01:52 +02:00
present.c randr: unexport and document RRFirstEnabledCrtc() 2025-06-12 16:27:32 +02:00
present.h present: unexport present_extension_init() 2025-06-12 17:21:45 +02:00
present_event.c dix: make LEGAL_NEW_RESOURCE() macro private 2025-06-12 17:21:43 +02:00
present_execute.c present: need to include dix-config.h 2025-02-23 17:18:46 +00:00
present_fake.c present: need to include dix-config.h 2025-02-23 17:18:46 +00:00
present_fence.c present: need to include dix-config.h 2025-02-23 17:18:46 +00:00
present_notify.c present: unlink notifies from window list in present_clear_window_notifies 2026-10-17 18:59:14 +02:00
present_priv.h present: use CloseScreen hook 2025-06-12 16:45:40 +02:00
present_request.c present: byte-swap notify list in sproc_present_pixmap_synced 2026-06-12 19:01:45 +02:00
present_scmd.c treewide: drop COMPOSITE symbol 2025-06-12 16:47:01 +02:00
present_screen.c miext: move over extinit_priv.h from include 2025-06-12 17:21:46 +02:00
present_vblank.c present: need to include dix-config.h 2025-02-23 17:18:46 +00:00