xserver/xkb
Olivier Fourdan 11fcda8753 xkb: Fix buffer overflow in XkbVModMaskText()
The code in XkbVModMaskText() allocates a fixed sized buffer on the
stack and copies the virtual mod name.

There's actually two issues in the code that can lead to a buffer
overflow.

First, the bound check mixes pointers and integers using misplaced
parenthesis, defeating the bound check.

But even though, if the check fails, the data is still copied, so the
stack overflow will occur regardless.

Change the logic to skip the copy entirely if the bound check fails.

CVE-2025-26595, ZDI-CAN-25545

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: Peter Hutterer <peter.hutterer@who-t.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1828>
2025-02-25 11:43:01 +01:00
..
ddxBeep.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
ddxCtrls.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
ddxKillSrv.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
ddxLEDs.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
ddxLoad.c win32: use lib system() instead of our own function 2025-02-11 09:53:59 +01:00
ddxPrivate.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
ddxVT.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
maprules.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
meson.build Add a Meson build system alongside autotools. 2017-04-26 15:25:27 -07:00
README.compiled R6.6 is the Xorg base-line 2003-11-14 15:54:54 +00:00
xkb-procs.h xkb: rename xkb.h to xkb-procs.h 2022-07-08 14:27:04 +00:00
xkb.c xkb: unexport functions from xkbfmisc.c 2025-02-06 22:45:25 +00:00
xkbAccessX.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
xkbActions.c mi: unexport mieqProcessDeviceEvent() 2025-02-06 16:45:20 +02:00
XKBAlloc.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
xkbDflts.h Use ARRAY_SIZE all over the tree 2017-10-30 13:45:20 -04:00
xkbEvents.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
xkbfile_priv.h xkb: unexport remaining internal declarations 2025-02-06 22:45:25 +00:00
xkbfmisc.c xkb: unexport functions from xkbout.c 2025-02-06 22:45:25 +00:00
xkbfmisc_priv.h xkb: unexport functions from xkbfmisc.c 2025-02-06 22:45:25 +00:00
XKBGAlloc.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
xkbgeom.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
xkbInit.c os: move BUG_*() macros to own private header 2025-02-17 19:32:48 +00:00
xkbLEDs.c drop obsolete HAVE_DIX_CONFIG_H 2024-10-10 13:38:31 +00:00
XKBMAlloc.c xkb: Always use MAP_LENGTH keymap size 2025-01-13 11:44:11 +01:00
XKBMisc.c xkb: unexport functions from xkbfmisc.c 2025-02-06 22:45:25 +00:00
xkbout.c include: drop now empty xkbfile.h 2025-02-06 22:45:25 +00:00
xkbout_priv.h xkb: unexport functions from xkbout.c 2025-02-06 22:45:25 +00:00
xkbPrKeyEv.c xwayland: Don't run key behaviors and actions 2025-02-03 05:37:48 +00:00
xkbsrv_priv.h include: move private defs to dixstruct_priv.h 2024-04-30 00:47:38 +00:00
xkbSwap.c xkb: drop swapping request length fields 2025-02-06 22:28:48 +00:00
xkbtext.c xkb: Fix buffer overflow in XkbVModMaskText() 2025-02-25 11:43:01 +01:00
xkbtext_priv.h xkbtext_priv.h: fix typo in header guard definition 2024-11-10 12:51:10 -08:00
xkbUtils.c xkb: Always use MAP_LENGTH keymap size 2025-01-13 11:44:11 +01:00
XKM_file_format.txt Fix spelling/wording issues 2020-07-05 13:07:33 -07:00
xkmread.c xkb: unexport remaining internal declarations 2025-02-06 22:45:25 +00: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.