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 Xext: bigreq: move it into it's own subdir 2026-06-18 13:07:15 +02:00
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 license: add X11 OR MIT OR AGPL-3.0-or-later to Enrico Weigelt's source files 2026-07-29 10:02:59 +02:00
dpms license: add X11 OR MIT OR AGPL-3.0-or-later to Enrico Weigelt's source files 2026-07-29 10:02:59 +02:00
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 Xext: geext: move it into its own subdir 2026-06-18 14:07:18 +02:00
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 treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
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 Xext: move some calls with return on error into macros 2026-06-24 19:23:43 +02:00
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 treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
hashtable.h
meson.build Xext: remove the XF86-BigFont extension 2026-07-27 18:31:44 +02:00
xace.c xext: xace: use stdbool's 'bool' instead of 'Bool' for local variables 2026-08-07 14:49:15 +02:00
xace.h treewide: don't include <region.h> anymore 2025-11-27 19:27:27 +01:00
xacestr.h