xserver/xkb
Olivier Fourdan 375965221a xkb: Prevent overflow in XkbSetCompatMap()
The XkbCompatMap structure stores its "num_si" and "size_si" fields
using an unsigned short.

However, the function _XkbSetCompatMap() will store the sum of the
input data "firstSI" and "nSI" in both XkbCompatMap's "num_si" and
"size_si" without first checking if the sum overflows the maximum
unsigned short value, leading to a possible overflow.

To avoid the issue, check whether the sum does not exceed the maximum
unsigned short value, or return a "BadValue" error otherwise.

CVE-2025-62231, ZDI-CAN-27560

This vulnerability was discovered by:
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2086>
(cherry picked from commit 475d9f49ac)
2026-01-25 10:40:03 -08:00
..
ddxBeep.c Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
ddxCtrls.c Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
ddxKillSrv.c Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
ddxLEDs.c Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
ddxLoad.c treewide: replace xnfstrdup() calls by XNFstrdup() 2026-01-25 10:39:55 -08:00
ddxPrivate.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
ddxVT.c Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
maprules.c xkb: drop defining XKBSRV_NEED_FILE_FUNCS 2026-01-19 12:32:18 -08:00
meson.build Add a Meson build system alongside autotools. 2017-04-26 15:25:27 -07:00
README.compiled Strip trailing whitespace from source files 2026-01-25 10:40:02 -08:00
xkb-procs.h xkb: rename xkb.h to xkb-procs.h 2022-07-08 14:27:04 +00:00
xkb.c xkb: Prevent overflow in XkbSetCompatMap() 2026-01-25 10:40:03 -08:00
xkbAccessX.c xkb: move *_TIMER defines into xkbAccessX.c 2026-01-25 10:39:52 -08:00
xkbActions.c xwayland: Don't run key behaviors and actions 2026-01-25 10:39:58 -08:00
XKBAlloc.c xkb: ensure XkbAllocNames sets num_rg to 0 on allocation failure 2026-01-25 10:40:01 -08:00
xkbDflts.h Use ARRAY_SIZE all over the tree 2017-10-30 13:45:20 -04:00
xkbEvents.c xkb: Free the XKB resource when freeing XkbInterest 2026-01-25 10:40:03 -08:00
xkbfmisc.c xkb: drop ununsed XkbNameMatchesPattern() 2026-01-19 12:32:25 -08:00
XKBGAlloc.c xkb: Fix heap overflow caused by optimized away min. 2020-12-04 18:31:06 -05:00
xkbgeom.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
xkbInit.c xkb: xkbInit: fix char signess mismatch 2026-01-25 10:39:57 -08:00
xkbLEDs.c dix: Force update LEDs after device state update in EnableDevice 2023-02-21 03:43:05 +00:00
XKBMAlloc.c xkb: Check that needed is > 0 in XkbResizeKeyActions 2026-01-25 10:40:01 -08:00
XKBMisc.c xkb: Fix buffer overflow in XkbChangeTypesOfKey() 2026-01-25 10:40:01 -08:00
xkbout.c xkb: drop defining XKBSRV_NEED_FILE_FUNCS 2026-01-19 12:32:18 -08:00
xkbPrKeyEv.c xwayland: Don't run key behaviors and actions 2026-01-25 10:39:58 -08:00
xkbSwap.c xkb: drop swapping request length fields 2026-01-25 10:39:58 -08:00
xkbtext.c xkb: Add tbGetBufferString helper function 2026-01-25 10:40:01 -08:00
xkbUtils.c xkb: Always use MAP_LENGTH keymap size 2026-01-25 10:39:58 -08:00
XKM_file_format.txt Fix spelling/wording issues 2020-07-05 13:07:33 -07:00
xkmread.c xkb: make XkbInternAtom() static 2026-01-25 10:39:53 -08: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.