xserver/dix
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Peter Hutterer 8304192c3c dix: remove passive grabs referencing a device on removal
Passive grabs (GrabRec) store raw DeviceIntPtr values for both the
grabbed device and the modifier device without any lifetime management.
When a device is removed via XIRemoveMaster, CloseDevice() frees the
device struct, but leaves dangling pointers in grab->modifierDevice
for any grab that used this device.

Subsequent pointer events trigger CheckPassiveGrab() which dereferences
the dangling modifierDevice pointer for XI grabs (the CORE and XI2 paths
reassign it, but the XI path does not).

This vulnerability was discovered by:
  Anonymous working with TrendAI Zero Day Initiative

ZDI-CAN-31832

CVE-2026-93516

Assisted-by: Claude:claude-opus-4-6
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2341>
(cherry picked from commit be57263415)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2026-10-20 19:53:06 +02:00
..
.gitignore
atom.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
atom_priv.h
BuiltInAtoms
callback_priv.h glx: revert cb85ceae2d 2025-11-11 10:46:29 +01:00
client.c dix: add callback before ClientRec is being destroyed 2025-09-22 12:15:31 +02:00
client_priv.h dix: replace XACE_CLIENT_ACCESS by direct callback 2025-09-29 11:24:13 +02:00
color.c dix: remove dixLookupBuiltinColor() unused screen argument 2025-11-28 18:43:40 +01:00
colormap.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
colormap_priv.h
cursor.c cursor: fix AllocARGBCursor leak/double-free for psrcbits/pmaskbits/argb 2026-05-21 16:50:29 +02:00
cursor_priv.h include: unexport CURSOR_BITS_SIZE() and CURSOR_REC_SIZE() macros 2025-11-08 10:45:43 +01:00
devices.c dix: remove passive grabs referencing a device on removal 2026-10-20 19:53:06 +02:00
devices_priv.h dix: replace XACE_CLIENT_ACCESS by direct callback 2025-10-07 10:52:54 +02:00
dispatch.c dix: dispatch: return DestroySubwindows() errors from ProcDestroySubwindows 2026-10-13 09:49:34 +02:00
dispatch.h dix: move include guards up to wrap the whole file 2025-11-21 15:20:11 +01:00
display.c
dix_priv.h os: rename __size_assert() into __SIZE_ASSERT() 2026-06-18 12:01:35 +02:00
dixfonts.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
dixgrabs_priv.h treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
dixstruct_priv.h include: don't install client.h anymore 2025-12-05 19:44:59 +01:00
dixutils.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
enterleave.c Xi: move it under Xext/xinput 2026-06-17 16:25:12 +02:00
enterleave.h dix: move include guards up to wrap the whole file 2025-11-21 15:20:11 +01:00
eventconvert.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
eventconvert.h
events.c dix, Xi: remove spurious dereference when checking function pointers 2026-10-15 11:42:34 +02:00
exevents_priv.h dix: unexport XIUnregisterPropertyHandler() and XIDeleteAllDeviceProperties() 2025-11-20 19:21:37 +01:00
extension.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
extension_priv.h dix: replace XACE_EXT_ACCESS and XACE_EXT_DISPATCH by direct callback 2025-09-23 11:37:50 +02:00
gc.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
gc_priv.h dix: move GCAllBits define into private header 2025-11-27 20:05:59 +01:00
generate-atoms dix: don't include dix-config.h from randrstr.h 2025-07-23 15:46:51 +02:00
gestures.c Xi: move it under Xext/xinput 2026-06-17 16:25:12 +02:00
getevents.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
globals.c Add Support for DPI Auto-Detection 2026-10-07 14:50:24 +02:00
glyphcurs.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
grabs.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
input_priv.h dix: make InputDevIsFloating() and InputDevIsMaster() static inline 2026-10-06 17:20:37 +02:00
inpututils.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
inpututils_priv.h treewide: drop including <dix-config.h> from private includes 2025-12-04 19:50:44 +01:00
lookup.c dix: use NULL instead of NullClient 2025-07-18 22:24:55 +02:00
main.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
meson.build Xext: move sleepuntil.c to dix 2026-06-19 09:37:22 +02:00
pixmap.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
privates.c dix: fix missing includes of <assert.h> 2026-06-18 17:36:59 +02:00
property.c Xext: move remaining panoramix headers into panoramix subdir. 2026-06-17 19:01:48 +02:00
property_priv.h dix: unexport DeleteProperty() 2025-11-20 19:22:35 +01:00
protocol.txt
ptrveloc.c Treewide: Fix typos 2026-03-16 13:11:07 +01:00
ptrveloc_priv.h
region.c RegionValidate: Fix double free of badreg->data on the error path 2026-10-02 13:57:31 +02:00
registry.c
registry_priv.h
reqhandlers_priv.h dix: inline SProcGrabButton() 2026-01-31 16:20:28 +01:00
request_priv.h include: dix.h: add macros for reply swapping in request handlers 2026-04-28 13:26:09 +02:00
resource.c glx: fix DrawableGone use-after-free without rejecting duplicate drawables 2026-08-24 12:24:29 +02:00
resource_priv.h glx: fix DrawableGone use-after-free without rejecting duplicate drawables 2026-08-24 12:24:29 +02:00
rpcbuf.c dix: unexport SwapLongs() 2025-11-25 18:26:02 +01:00
rpcbuf_priv.h dix: rpcbuf: write empty counted string for NULL str 2026-10-08 13:01:01 +02:00
screen.c dix: dixFreeScreen call hookPostCreateResources too 2025-10-29 11:41:26 +01:00
screen_hooks.c dix: encapsulate ScreenRec::UnrealizeWindow() call in helper function 2026-01-08 17:44:11 +01:00
screen_hooks_priv.h glxmor/glamor_egl: Move glamor_egl_close_screen to the post screen close hook 2026-04-02 10:13:02 +02:00
screenint_priv.h treewide: use helper dixGetScreenPtr() for retrieving ScreenPtr's 2025-10-30 09:44:24 +01:00
screensaver_priv.h dix: unexport screenIsSaved and HasSaverWindow() 2025-11-20 17:52:23 +01:00
selection.c dix: ProcSetSelectionOwner(): use X_REQUEST_* macros 2026-05-08 14:05:35 +02:00
selection_priv.h
server_priv.h dix: reexport ConnectionInfo for NVidia 390 2025-11-27 17:06:36 +01:00
settings.c os: unexport SeatId and move it to dix settings 2026-02-03 11:34:14 +01:00
settings_priv.h os: unexport SeatId and move it to dix settings 2026-02-03 11:34:14 +01:00
sleepuntil.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
sleepuntil.h Xext: move sleepuntil.c to dix 2026-06-19 09:37:22 +02:00
stubmain.c
swaprep.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
swaprep.h dix: swaprep.h: fix missing include of Xdefs.h 2026-04-23 10:29:14 +02:00
swapreq.c treewide: clean up includes of misc.h 2026-06-19 19:24:57 +02:00
swapreq.h dix: inline SProcQueryColor() 2026-01-31 16:16:19 +01:00
tables.c dix: inline SProcGrabButton() 2026-01-31 16:20:28 +01:00
touch.c Xi: move it under Xext/xinput 2026-06-17 16:25:12 +02:00
window.c dix/window: fix UnmapNotify and DestroyNotify order in DestroySubwindows 2026-10-14 12:30:36 +02:00
window_priv.h include: windowstr.h: unexport w*() macros 2025-11-27 19:54:42 +01:00