xserver/Xext
Olivier Fourdan 640d98f493 sync: Do not let sync objects uninitialized
When changing an alarm, the change mask values are evaluated one after
the other, changing the trigger values as requested and eventually,
SyncInitTrigger() is called.

SyncInitTrigger() will evaluate the XSyncCACounter first and may free
the existing sync object.

Other changes are then evaluated and may trigger an error and an early
return, not adding the new sync object.

This can be used to cause a use after free when the alarm eventually
triggers.

To avoid the issue, delete the existing sync object as late as possible
only once we are sure that no further error will cause an early exit.

CVE-2025-26601, ZDI-CAN-25870

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>
(cherry picked from commit 16a1242d0f)
2026-01-25 10:40:01 -08:00
..
bigreq.c Xext: bigreq: drop swapping request length fields 2026-01-25 10:39:59 -08:00
dpms.c Xext: dpms: need to include geext.h 2026-01-25 10:40:00 -08:00
dpmsproc.h dpms: Consolidate a bunch of stuff into Xext/dpms.c 2017-03-27 15:59:47 -04:00
geext.c Xext: geext: move struct _GEExtension into geext.c 2026-01-25 10:40:00 -08:00
geext.h Xext: geext.h: fix missing include of Xfuncproto.h 2026-01-25 10:40:00 -08:00
geint.h xge: Hide some implementation details 2015-07-08 16:40:58 -04:00
hashtable.c dix: Fix undefined shift in ht_generic_hash 2019-10-15 14:06:30 -04:00
hashtable.h Fix spelling/wording issues 2020-07-05 13:07:33 -07:00
meson.build Xace: dont install xace.h and xacestr.h anymore 2026-01-25 10:39:54 -08:00
panoramiX.c drop remains of DMX 2026-01-19 12:32:20 -08:00
panoramiX.h Xext: drop _PANORAMIX_SERVER 2026-01-25 10:39:54 -08:00
panoramiXh.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
panoramiXprocs.c dix: unexport Ones() 2026-01-25 10:39:57 -08:00
panoramiXsrv.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
panoramiXSwap.c Xext: panoramiX: drop now obsolete swap procs 2026-01-25 10:39:59 -08:00
saver.c Xext: saver: consolidate (non-)xinerama versions 2026-01-25 10:39:59 -08:00
security.c Xext: security: drop swapping request length fields 2026-01-25 10:39:59 -08:00
securitysrv.h Xext: securitysrv.h: drop hacks for including secur.h 2026-01-25 10:39:54 -08:00
shape.c Xext: shape: drop now obsolete swap procs 2026-01-25 10:39:59 -08:00
shm.c Xext: shm: drop now obsolete swap procs 2026-01-25 10:39:59 -08:00
shmint.h xext: Fix shmint.h to not use headers outside of sdk_HEADERS 2013-11-14 10:22:15 +09:00
sleepuntil.c prevent name clash on Windows w/ RT_* defines 2026-01-19 12:48:30 -08:00
sleepuntil.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
sync.c sync: Do not let sync objects uninitialized 2026-01-25 10:40:01 -08:00
syncsdk.h xsync: Add resource inside of SyncCreate, export SyncCreate 2019-04-17 14:01:17 -07:00
syncsrv.h sync: Convert from "CARD64" to int64_t. 2017-09-20 13:19:27 -04:00
vidmode.c Xext: vidmode: drop now obsolete swap procs 2026-01-25 10:39:59 -08:00
xace.c xace: typesafe hook function for XACE_KEY_AVAIL 2026-01-25 10:39:54 -08:00
xace.h xace: typesafe hook function for XACE_KEY_AVAIL 2026-01-25 10:39:54 -08:00
xacestr.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
xcmisc.c Xext: xcmisc: drop now obsolete swap procs 2026-01-25 10:39:59 -08:00
xf86bigfont.c Xext: xf86bigfont: drop swapping request length fields 2026-01-25 10:39:59 -08:00
xf86bigfontsrv.h Move extension initialisation prototypes into extinit.h 2012-07-09 23:06:41 -07:00
xres.c Xext: xres: drop swapping request length fields 2026-01-25 10:39:59 -08:00
xselinux.h include: unpexport SELINUX_* consts from include/global.h 2026-01-19 12:32:24 -08:00
xselinux_ext.c Xext: selinux: drop swapping request length fields 2026-01-25 10:39:59 -08:00
xselinux_hooks.c fix missing includes of <X11/Xfuncproto.h> 2026-01-25 10:39:55 -08:00
xselinux_label.c rename remaining RT_* defines to X11_RESTYPE_* 2026-01-19 12:48:30 -08:00
xselinuxint.h selinux: Stop using security_context_t 2021-08-17 16:02:39 -04:00
xtest.c Xext: xtest: drop now obsolete swap procs 2026-01-25 10:39:59 -08:00
xvdisp.c Xext: xv: drop now obsolete swap procs 2026-01-25 10:39:59 -08:00
xvdisp.h Fix swapped Xv dispatch under Xinerama. 2007-12-02 14:15:36 -05:00
xvdix.h xv: move XvVideoNotifyRec into xvmain.c 2026-01-25 10:39:55 -08:00
xvmain.c xv: move XvVideoNotifyRec into xvmain.c 2026-01-25 10:39:55 -08:00
xvmc.c Xext: xvmc: drop unused XvMCScreenInitProc 2026-01-25 10:39:57 -08:00
xvmcext.h Xext: xvmc: drop unused XvMCScreenInitProc 2026-01-25 10:39:57 -08:00