xserver/Xext
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Peter Hutterer a8192aa709 Xi: add bounds check for barrier events in input_constrain_cursor
input_constrain_cursor() writes barrier hit and leave events into the
InputEventList buffer without checking how many slots remain.
The buffer is allocated by the DDX at GetMaximumEventsNum() (100) entries
and may contain one raw event already. A client can create more than 100
pointer barriers, pre-arm them as released via XIBarrierReleasePointer,
and then trigger a single pointer motion that crosses all barriers
simultaneously. The leave event loop iterates every hit barrier and
writes one event per barrier, overflowing the 100-slot buffer.

In an ideal world we'd change the InternalEvent* pointer to a struct
that contains allocated size, number of events and the pointer itself
but we're crossing public APIs here and that requires an ABI bump.

So we make do with cutting off the number of barrier events at 64 which
should be low enough to not trigger the issue. However, for the 100+
barrier case this means we only send BarierHit events, not BarrierRelease.
Potentially leaving a client stuck.

We mitigate that problem by simply refusing to create more than 32
barriers per screen (which on its own would also fix the issue, but hey,
'doppelt gemoppelt' as they say).

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

ZDI-CAN-31938

CVE-2026-93519

Assisted-by: Claude:claude-opus-4-6
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2341>
(cherry picked from commit 1f42cc1f00)
2026-10-20 21:11:11 +02:00
..
bigreq
composite composite: fix inverted cw->damaged in compReportDamage() 2026-10-19 13:10:03 +02:00
damage Xext: damage: fix mismatching event swap prototypes 2026-10-15 17:30:26 +02:00
doublebuffer
dpms
dri2 xext: dri2: use stdbool's 'bool' instead of 'Bool' for local variables 2026-08-07 14:23:35 +02:00
dri3 treewide: Add and use fallbacks for libdrm and libgbm 2026-09-09 11:33:33 +02:00
geext
glx glx: validate dataBytes against cmdlen in RenderLarge first request 2026-10-20 19:49:20 +02:00
namespace Xext/namespace: fix memory leak during namespace destruction 2026-10-07 16:01:44 +02:00
panoramiX Xext: panoramiX: declare where needed in PanoramiXCreateConnectionBlock() 2026-10-01 11:26:55 +02:00
present present: unlink notifies from window list in present_clear_window_notifies 2026-10-20 19:49:20 +02:00
pseudoramiX pseudoramiX: use X_REQUEST_*()/X_REPLY_*() macros in request handlers 2026-10-13 14:45:14 +02:00
randr Xext: randr: fix mismatching event swap prototypes 2026-10-15 17:30:45 +02:00
record xext: record: use stdbool's 'bool' instead of 'Bool' for local variables 2026-08-07 14:25:59 +02:00
render render: free animated cursor timers on destruction 2026-10-13 13:58:33 +02:00
saver Xext: saver: fix mismatching event swap prototypes 2026-10-17 19:37:55 +02:00
security Xext: security: fix double free when AddResource() fails 2026-10-14 11:59:30 +02:00
shape Xext: shape: fix mismatching event swap prototypes 2026-10-15 17:57:49 +02:00
shm Xext: shm: fix mismatching event swap prototypes 2026-10-16 11:59:20 +02:00
sync Xext: sync: fix mismatching event swap prototypes 2026-10-15 19:08:16 +02:00
xcmisc
xfixes Xext: xfixes: fix mismatching event swap prototypes 2026-10-15 17:28:32 +02:00
xinput Xi: add bounds check for barrier events in input_constrain_cursor 2026-10-20 21:11:11 +02:00
xkeyboard xkb: fix CheckKeySyms overwriting request-range symsPerKey entries 2026-10-20 19:54:36 +02:00
xres xext: xres: use stdbool's 'bool' instead of 'Bool' for local variables 2026-08-07 14:35:50 +02:00
xselinux
xtest Handle -Wimplicit-fallthrough warnings from gcc 16.1 2026-09-30 21:03:21 +02:00
xv Xext: xv: fix mismatching event swap prototypes 2026-10-17 19:45:49 +02:00
hashtable.c
hashtable.h
meson.build
xace.c xext: xace: use stdbool's 'bool' instead of 'Bool' for local variables 2026-08-07 14:49:15 +02:00
xace.h
xacestr.h