xserver/xkb
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Peter Hutterer 6e0d121c4d xkb: Add bounds check for action data in CheckKeyActions()
CheckKeyActions() validates the per-key action count bytes individually
but does not verify that the computed total action data region falls
within the request buffer before advancing the wire pointer past it.

After the loop, the function calculates the final wire position as
wire + nActs * sizeof(XkbAnyAction), where nActs is the sum of per-key
action counts read from the request. The upstream length validation in
_XkbSetMapCheckLength() uses req->totalActs from the request header,
not the computed nActs. If a crafted request provides a totalActs value
that passes the length check but per-key action counts that sum to a
different nActs, the wire pointer could advance past the actual request
buffer.

The subsequent SetKeyActions() function uses memcpy to read from this
potentially out-of-bounds region, which could leak heap data or cause
a crash.

Assisted-by: Claude:claude-claude-opus-4-6
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2208>
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-06-05 15:03:19 +02:00
..
ddxBeep.c xkb: drop special generation magic on atom initialization 2025-11-20 16:36:29 +01:00
ddxCtrls.c xkb: unexport XkbDDX*() functions 2025-06-12 17:21:45 +02:00
ddxKillSrv.c xkb: unexport DDX entry points 2025-06-12 17:21:45 +02:00
ddxLEDs.c xkb: unexport XkbDDX*() functions 2025-06-12 17:21:45 +02:00
ddxLoad.c xkb: zero out structs and arrays 2026-04-30 15:18:58 +02:00
ddxPrivate.c xkb: unexport DDX entry points 2025-06-12 17:21:45 +02:00
ddxVT.c xkb: unexport DDX entry points 2025-06-12 17:21:45 +02:00
maprules.c xkb: preserve buffer on realloc failure 2026-06-03 19:20:12 +02:00
meson.build xkb: inline remaining byte-swapping 2025-10-29 10:58:37 +01:00
README.compiled R6.6 is the Xorg base-line 2003-11-14 15:54:54 +00:00
xkb-procs.h xkb: inline remaining byte-swapping 2025-10-29 10:58:37 +01:00
xkb.c xkb: Add bounds check for action data in CheckKeyActions() 2026-06-05 15:03:19 +02:00
xkbAccessX.c xkb: zero out structs and arrays 2026-04-30 15:18:58 +02:00
xkbActions.c xkb: Handle allocation failures in _XkbNextFreeFilter() 2026-05-01 18:43:57 +02:00
XKBAlloc.c xkb: rename xkbgeom.h to xkbgeom_priv.h 2026-01-20 12:45:01 +01:00
xkbDflts.h xkb: move include guards up to wrap the whole file 2025-11-21 15:20:11 +01:00
xkbEvents.c xkb: zero out structs and arrays 2026-04-30 15:18:58 +02:00
xkbfile_priv.h xkb: unexport remaining internal declarations 2025-02-06 22:45:25 +00:00
xkbfmisc.c xkb: rename xkbgeom.h to xkbgeom_priv.h 2026-01-20 12:45:01 +01:00
xkbfmisc_priv.h xkb: unexport functions from xkbfmisc.c 2025-02-06 22:45:25 +00:00
XKBGAlloc.c xkb: XkbAddGeomProperty(): handle OOM on strdup() 2026-04-30 18:53:53 +02:00
xkbgeom_priv.h xkb: rename xkbgeom.h to xkbgeom_priv.h 2026-01-20 12:45:01 +01:00
xkbInit.c xkb: fail if we can't strdup our default rules 2026-05-01 18:50:01 +02:00
xkbLEDs.c xkb: zero out structs and arrays 2026-04-30 15:18:58 +02:00
XKBMAlloc.c XKBMAlloc: Solve CodeQL Alert Potential use after double free 2025-07-23 14:40:42 +02:00
XKBMisc.c xkb: zero out structs and arrays 2026-04-30 15:18:58 +02:00
xkbout.c xkb: rename xkbgeom.h to xkbgeom_priv.h 2026-01-20 12:45:01 +01:00
xkbout_priv.h xkb: unexport functions from xkbout.c 2025-02-06 22:45:25 +00:00
xkbPrKeyEv.c xkb: zero out structs and arrays 2026-04-30 15:18:58 +02:00
xkbrules_priv.h xkb: unexport XkbRF_VarDefsRec struct 2025-06-12 17:21:47 +02:00
xkbsrv_priv.h treewide: fix typos 2026-03-16 13:11:07 +01:00
xkbtext.c xkb: zero out structs and arrays 2026-04-30 15:18:58 +02:00
xkbtext_priv.h xkbtext_priv.h: fix typo in header guard definition 2024-11-10 12:51:10 -08:00
xkbUtils.c xkb: zero out structs and arrays 2026-04-30 15:18:58 +02:00
XKM_file_format.txt Treewide: Fix typos 2026-03-16 13:11:07 +01:00
xkmread.c xkb: Fix out-of-bounds array access in xkmread.c ReadXkmGeometry 2026-05-21 17:00:28 +02:00

The X server uses this directory to store the compiled version of the
current keymap and/or any scratch keymaps used by clients.  The X server
or some other tool might destroy or replace the files in this directory,
so it is not a safe place to store compiled keymaps for long periods of
time.  The default keymap for any server is usually stored in:
     X<num>-default.xkm
where <num> is the display number of the server in question, which makes
it possible for several servers *on the same host* to share the same 
directory.

Unless the X server is modified, sharing this directory between servers on
different hosts could cause problems.