xserver/present
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Peter Hutterer 3be6db8d14 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)
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-10-08 17:45:51 +02:00
..
meson.build present: tiny whitespace cleanup 2025-09-22 16:42:23 +02:00
present.c present: Walk all children when setting window pixmaps 2025-11-06 15:56:07 +01:00
present.h present: unexport symbols not used by drivers 2025-09-26 17:09:43 +02:00
present_event.c present: unexport symbols not used by drivers 2025-09-26 17:09:43 +02:00
present_execute.c present: unexport symbols not used by drivers 2025-09-26 17:09:43 +02:00
present_fake.c present: unexport symbols not used by drivers 2025-09-26 17:09:43 +02:00
present_fence.c present: unexport symbols not used by drivers 2025-09-26 17:09:43 +02:00
present_notify.c present: unlink notifies from window list in present_clear_window_notifies 2026-10-08 17:45:51 +02:00
present_priv.h present: unexport symbols not used by drivers 2025-09-26 17:09:43 +02:00
present_request.c present: byte-swap notify list in sproc_present_pixmap_synced 2026-06-12 18:53:27 +02:00
present_scmd.c treewide: macros lambda-esque screen iteration 2025-10-01 11:40:34 +02:00
present_screen.c treewide: macros lambda-esque screen iteration 2025-10-01 11:40:34 +02:00
present_vblank.c present: Don't ping-pong between sync and async flips 2025-11-06 15:56:07 +01:00