Module Name: xsrc
Committed By: martin
Date: Thu Feb 27 10:16:47 UTC 2025
Modified Files:
xsrc/external/mit/xorg-server/dist [netbsd-10]: ChangeLog configure
configure.ac meson.build
xsrc/external/mit/xorg-server/dist/Xext [netbsd-10]: sync.c
xsrc/external/mit/xorg-server/dist/Xi [netbsd-10]: xibarriers.c
xichangehierarchy.c
xsrc/external/mit/xorg-server/dist/composite [netbsd-10]: compalloc.c
xsrc/external/mit/xorg-server/dist/config [netbsd-10]: 10-quirks.conf
xsrc/external/mit/xorg-server/dist/dix [netbsd-10]: devices.c
dispatch.c enterleave.c eventconvert.c main.c
xsrc/external/mit/xorg-server/dist/glamor [netbsd-10]: glamor_program.c
xsrc/external/mit/xorg-server/dist/hw/xfree86/common [netbsd-10]:
xf86Configure.c xf86sbusBus.c
xsrc/external/mit/xorg-server/dist/hw/xfree86/dri2 [netbsd-10]: dri2.c
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting
[netbsd-10]:
driver.c drmmode_display.c drmmode_display.h present.c
xsrc/external/mit/xorg-server/dist/hw/xfree86/fbdevhw [netbsd-10]:
fbdevhw.c
xsrc/external/mit/xorg-server/dist/include [netbsd-10]: dix-config.h.in
do-not-use-config.h.in meson.build
xsrc/external/mit/xorg-server/dist/os [netbsd-10]: WaitFor.c access.c
connection.c
xsrc/external/mit/xorg-server/dist/render [netbsd-10]: picture.c
xsrc/external/mit/xorg-server/dist/test/sync [netbsd-10]: sync.c
xsrc/external/mit/xorg-server/dist/xkb [netbsd-10]: XKBMAlloc.c
XKBMisc.c xkb.c xkbUtils.c xkbtext.c
xsrc/external/mit/xorg-server/include [netbsd-10]: dix-config.h
version-config.h xorg-config.h xorg-server.h
Log Message:
Pull up the following revisions, requested by mrg in ticket #1067:
external/mit/xorg-server/dist/ChangeLog up to 1.1.1.28
external/mit/xorg-server/dist/configure up to 1.21
external/mit/xorg-server/dist/configure.ac up to 1.23
external/mit/xorg-server/dist/meson.build up to 1.1.1.18
external/mit/xorg-server/dist/Xext/sync.c up to 1.14
external/mit/xorg-server/dist/Xi/xibarriers.c up to 1.5
external/mit/xorg-server/dist/Xi/xichangehierarchy.c up to 1.8
external/mit/xorg-server/dist/composite/compalloc.c up to 1.1.1.9
external/mit/xorg-server/dist/config/10-quirks.conf up to 1.1.1.2
external/mit/xorg-server/dist/dix/devices.c up to 1.16
external/mit/xorg-server/dist/dix/dispatch.c up to 1.9
external/mit/xorg-server/dist/dix/enterleave.c up to 1.10
external/mit/xorg-server/dist/dix/eventconvert.c up to 1.1.1.8
external/mit/xorg-server/dist/dix/main.c up to 1.1.1.9
external/mit/xorg-server/dist/glamor/glamor_program.c up to 1.1.1.4
external/mit/xorg-server/dist/hw/xfree86/common/xf86Configure.c up to
1.13
external/mit/xorg-server/dist/hw/xfree86/common/xf86sbusBus.c up to 1.8
external/mit/xorg-server/dist/hw/xfree86/dri2/dri2.c up to 1.6
external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c
up to 1.8
external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c
up to 1.12
external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.h
up to 1.1.1.5
external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c
up to 1.9
external/mit/xorg-server/dist/hw/xfree86/fbdevhw/fbdevhw.c up to 1.6
external/mit/xorg-server/dist/include/dix-config.h.in up to 1.10
external/mit/xorg-server/dist/include/do-not-use-config.h.in up to
1.1.1.17
external/mit/xorg-server/dist/include/meson.build up to 1.1.1.7
external/mit/xorg-server/dist/os/WaitFor.c up to 1.6
external/mit/xorg-server/dist/os/access.c up to 1.8
external/mit/xorg-server/dist/os/connection.c up to 1.9
external/mit/xorg-server/dist/render/picture.c up to 1.1.1.10
external/mit/xorg-server/dist/test/sync/sync.c up to 1.1.1.2
external/mit/xorg-server/dist/xkb/XKBMAlloc.c up to 1.1.1.7
external/mit/xorg-server/dist/xkb/XKBMisc.c up to 1.1.1.8
external/mit/xorg-server/dist/xkb/xkb.c up to 1.11
external/mit/xorg-server/dist/xkb/xkbUtils.c up to 1.1.1.9
external/mit/xorg-server/dist/xkb/xkbtext.c up to 1.1.1.7
external/mit/xorg-server/include/dix-config.h up to 1.54
external/mit/xorg-server/include/version-config.h up to 1.24
external/mit/xorg-server/include/xorg-config.h up to 1.34
external/mit/xorg-server/include/xorg-server.h up to 1.34
Update to xorg-server 21.1.16.
This fixes various CVEs, related to cursors and keyboards,
device handling, and use-after-free errors:
CVE-2025-26594, ZDI-CAN-25544
CVE-2025-26595, ZDI-CAN-25545
CVE-2025-26596, ZDI-CAN-25543
CVE-2025-26597, ZDI-CAN-25683
CVE-2025-26598, ZDI-CAN-25740
CVE-2025-26599, ZDI-CAN-25851
CVE-2025-26600, ZDI-CAN-25871
CVE-2025-26601, ZDI-CAN-25870
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.20.2.5 -r1.1.1.20.2.6 \
xsrc/external/mit/xorg-server/dist/ChangeLog
cvs rdiff -u -r1.13.2.5 -r1.13.2.6 \
xsrc/external/mit/xorg-server/dist/configure
cvs rdiff -u -r1.15.2.5 -r1.15.2.6 \
xsrc/external/mit/xorg-server/dist/configure.ac
cvs rdiff -u -r1.1.1.10.2.5 -r1.1.1.10.2.6 \
xsrc/external/mit/xorg-server/dist/meson.build
cvs rdiff -u -r1.12.2.1 -r1.12.2.2 \
xsrc/external/mit/xorg-server/dist/Xext/sync.c
cvs rdiff -u -r1.4 -r1.4.4.1 \
xsrc/external/mit/xorg-server/dist/Xi/xibarriers.c
cvs rdiff -u -r1.6.2.1 -r1.6.2.2 \
xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c
cvs rdiff -u -r1.1.1.8 -r1.1.1.8.2.1 \
xsrc/external/mit/xorg-server/dist/composite/compalloc.c
cvs rdiff -u -r1.1.1.1 -r1.1.1.1.6.1 \
xsrc/external/mit/xorg-server/dist/config/10-quirks.conf
cvs rdiff -u -r1.13.2.1 -r1.13.2.2 \
xsrc/external/mit/xorg-server/dist/dix/devices.c
cvs rdiff -u -r1.7.2.1 -r1.7.2.2 \
xsrc/external/mit/xorg-server/dist/dix/dispatch.c \
xsrc/external/mit/xorg-server/dist/dix/enterleave.c
cvs rdiff -u -r1.1.1.6.2.1 -r1.1.1.6.2.2 \
xsrc/external/mit/xorg-server/dist/dix/eventconvert.c
cvs rdiff -u -r1.1.1.8 -r1.1.1.8.2.1 \
xsrc/external/mit/xorg-server/dist/dix/main.c
cvs rdiff -u -r1.1.1.3 -r1.1.1.3.2.1 \
xsrc/external/mit/xorg-server/dist/glamor/glamor_program.c
cvs rdiff -u -r1.12 -r1.12.2.1 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86Configure.c
cvs rdiff -u -r1.7 -r1.7.6.1 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86sbusBus.c
cvs rdiff -u -r1.5 -r1.5.2.1 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/dri2/dri2.c
cvs rdiff -u -r1.7 -r1.7.2.1 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c
cvs rdiff -u -r1.11 -r1.11.2.1 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c
cvs rdiff -u -r1.1.1.4 -r1.1.1.4.2.1 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.h
cvs rdiff -u -r1.8 -r1.8.2.1 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c
cvs rdiff -u -r1.5 -r1.5.2.1 \
xsrc/external/mit/xorg-server/dist/hw/xfree86/fbdevhw/fbdevhw.c
cvs rdiff -u -r1.8.2.1 -r1.8.2.2 \
xsrc/external/mit/xorg-server/dist/include/dix-config.h.in
cvs rdiff -u -r1.1.1.13.2.3 -r1.1.1.13.2.4 \
xsrc/external/mit/xorg-server/dist/include/do-not-use-config.h.in
cvs rdiff -u -r1.1.1.4.2.2 -r1.1.1.4.2.3 \
xsrc/external/mit/xorg-server/dist/include/meson.build
cvs rdiff -u -r1.5 -r1.5.2.1 xsrc/external/mit/xorg-server/dist/os/WaitFor.c
cvs rdiff -u -r1.6.2.1 -r1.6.2.2 \
xsrc/external/mit/xorg-server/dist/os/access.c
cvs rdiff -u -r1.7.2.1 -r1.7.2.2 \
xsrc/external/mit/xorg-server/dist/os/connection.c
cvs rdiff -u -r1.1.1.9 -r1.1.1.9.2.1 \
xsrc/external/mit/xorg-server/dist/render/picture.c
cvs rdiff -u -r1.1.1.1 -r1.1.1.1.4.1 \
xsrc/external/mit/xorg-server/dist/test/sync/sync.c
cvs rdiff -u -r1.1.1.6 -r1.1.1.6.4.1 \
xsrc/external/mit/xorg-server/dist/xkb/XKBMAlloc.c
cvs rdiff -u -r1.1.1.7 -r1.1.1.7.2.1 \
xsrc/external/mit/xorg-server/dist/xkb/XKBMisc.c
cvs rdiff -u -r1.8.2.2 -r1.8.2.3 xsrc/external/mit/xorg-server/dist/xkb/xkb.c
cvs rdiff -u -r1.1.1.6.4.2 -r1.1.1.6.4.3 \
xsrc/external/mit/xorg-server/dist/xkb/xkbUtils.c
cvs rdiff -u -r1.1.1.6 -r1.1.1.6.2.1 \
xsrc/external/mit/xorg-server/dist/xkb/xkbtext.c
cvs rdiff -u -r1.46.2.5 -r1.46.2.6 \
xsrc/external/mit/xorg-server/include/dix-config.h
cvs rdiff -u -r1.16.2.5 -r1.16.2.6 \
xsrc/external/mit/xorg-server/include/version-config.h
cvs rdiff -u -r1.26.2.5 -r1.26.2.6 \
xsrc/external/mit/xorg-server/include/xorg-config.h \
xsrc/external/mit/xorg-server/include/xorg-server.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/xorg-server/dist/ChangeLog
diff -u xsrc/external/mit/xorg-server/dist/ChangeLog:1.1.1.20.2.5 xsrc/external/mit/xorg-server/dist/ChangeLog:1.1.1.20.2.6
--- xsrc/external/mit/xorg-server/dist/ChangeLog:1.1.1.20.2.5 Sat Nov 2 10:35:43 2024
+++ xsrc/external/mit/xorg-server/dist/ChangeLog Thu Feb 27 10:16:37 2025
@@ -1,3 +1,963 @@
+commit b7f84e6d509c004a7abb514af75b94cb907d451b
+Author: Olivier Fourdan <[email protected]>
+Date: Tue Feb 25 15:38:07 2025 +0100
+
+ xserver 21.1.16
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit a2c0f84c1cd0c92918f08f83f562c2e324cd4cbb
+Author: Olivier Fourdan <[email protected]>
+Date: Mon Jan 20 17:10:31 2025 +0100
+
+ sync: Apply changes last in SyncChangeAlarmAttributes()
+
+ SyncChangeAlarmAttributes() would apply the various changes while
+ checking for errors.
+
+ If one of the changes triggers an error, the changes for the trigger,
+ counter or delta value would remain, possibly leading to inconsistent
+ changes.
+
+ Postpone the actual changes until we're sure nothing else can go wrong.
+
+ Related to CVE-2025-26601, ZDI-CAN-25870
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit c285798984c6bb99e454a33772cde23d394d3dcd)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 043a4e959b8590ff37b72cd3440328ec3e39699f
+Author: Olivier Fourdan <[email protected]>
+Date: Mon Jan 20 17:06:07 2025 +0100
+
+ sync: Do not fail SyncAddTriggerToSyncObject()
+
+ We do not want to return a failure at the very last step in
+ SyncInitTrigger() after having all changes applied.
+
+ SyncAddTriggerToSyncObject() must not fail on memory allocation, if the
+ allocation of the SyncTriggerList fails, trigger a FatalError() instead.
+
+ Related to CVE-2025-26601, ZDI-CAN-25870
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit 8cbc90c8817306af75a60f494ec9dbb1061e50db)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 330b4068212c02548b53d19c0078ddc75c36a724
+Author: Olivier Fourdan <[email protected]>
+Date: Mon Jan 20 16:54:30 2025 +0100
+
+ sync: Check values before applying changes
+
+ In SyncInitTrigger(), we would set the CheckTrigger function before
+ validating the counter value.
+
+ As a result, if the counter value overflowed, we would leave the
+ function SyncInitTrigger() with the CheckTrigger applied but without
+ updating the trigger object.
+
+ To avoid that issue, move the portion of code checking for the trigger
+ check value before updating the CheckTrigger function.
+
+ Related to CVE-2025-26601, ZDI-CAN-25870
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit f52cea2f93a0c891494eb3334894442a92368030)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit e708ad021753d603580d314c48b93d3adf459c5f
+Author: Olivier Fourdan <[email protected]>
+Date: Mon Jan 20 16:52:01 2025 +0100
+
+ 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 <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit 16a1242d0ffc7f45ed3c595ee7564b5c04287e0b)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 826cef825fe49a275deb28e85b8c714b697f5efa
+Author: Olivier Fourdan <[email protected]>
+Date: Mon Dec 16 16:18:04 2024 +0100
+
+ dix: Dequeue pending events on frozen device on removal
+
+ When a device is removed while still frozen, the events queued for that
+ device remain while the device itself is freed.
+
+ As a result, replaying the events will cause a use after free.
+
+ To avoid the issue, make sure to dequeue and free any pending events on
+ a frozen device when removed.
+
+ CVE-2025-26600, ZDI-CAN-25871
+
+ This vulnerability was discovered by:
+ Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit 6e0f332ba4c8b8c9a9945dc9d7989bfe06f80e14)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit d09125fbb3b997ed77b7f008f8bd30328ba69fbb
+Author: Olivier Fourdan <[email protected]>
+Date: Mon Jan 13 16:09:43 2025 +0100
+
+ composite: initialize border clip even when pixmap alloc fails
+
+ If it fails to allocate the pixmap, the function compAllocPixmap() would
+ return early and leave the borderClip region uninitialized, which may
+ lead to the use of uninitialized value as reported by valgrind:
+
+ Conditional jump or move depends on uninitialised value(s)
+ at 0x4F9B33: compClipNotify (compwindow.c:317)
+ by 0x484FC9: miComputeClips (mivaltree.c:476)
+ by 0x48559A: miValidateTree (mivaltree.c:679)
+ by 0x4F0685: MapWindow (window.c:2693)
+ by 0x4A344A: ProcMapWindow (dispatch.c:922)
+ by 0x4A25B5: Dispatch (dispatch.c:560)
+ by 0x4B082A: dix_main (main.c:282)
+ by 0x429233: main (stubmain.c:34)
+ Uninitialised value was created by a heap allocation
+ at 0x4841866: malloc (vg_replace_malloc.c:446)
+ by 0x4F47BC: compRedirectWindow (compalloc.c:171)
+ by 0x4FA8AD: compCreateWindow (compwindow.c:592)
+ by 0x4EBB89: CreateWindow (window.c:925)
+ by 0x4A2E6E: ProcCreateWindow (dispatch.c:768)
+ by 0x4A25B5: Dispatch (dispatch.c:560)
+ by 0x4B082A: dix_main (main.c:282)
+ by 0x429233: main (stubmain.c:34)
+
+ Conditional jump or move depends on uninitialised value(s)
+ at 0x48EEDBC: pixman_region_translate (pixman-region.c:2233)
+ by 0x4F9255: RegionTranslate (regionstr.h:312)
+ by 0x4F9B7E: compClipNotify (compwindow.c:319)
+ by 0x484FC9: miComputeClips (mivaltree.c:476)
+ by 0x48559A: miValidateTree (mivaltree.c:679)
+ by 0x4F0685: MapWindow (window.c:2693)
+ by 0x4A344A: ProcMapWindow (dispatch.c:922)
+ by 0x4A25B5: Dispatch (dispatch.c:560)
+ by 0x4B082A: dix_main (main.c:282)
+ by 0x429233: main (stubmain.c:34)
+ Uninitialised value was created by a heap allocation
+ at 0x4841866: malloc (vg_replace_malloc.c:446)
+ by 0x4F47BC: compRedirectWindow (compalloc.c:171)
+ by 0x4FA8AD: compCreateWindow (compwindow.c:592)
+ by 0x4EBB89: CreateWindow (window.c:925)
+ by 0x4A2E6E: ProcCreateWindow (dispatch.c:768)
+ by 0x4A25B5: Dispatch (dispatch.c:560)
+ by 0x4B082A: dix_main (main.c:282)
+ by 0x429233: main (stubmain.c:34)
+
+ Conditional jump or move depends on uninitialised value(s)
+ at 0x48EEE33: UnknownInlinedFun (pixman-region.c:2241)
+ by 0x48EEE33: pixman_region_translate (pixman-region.c:2225)
+ by 0x4F9255: RegionTranslate (regionstr.h:312)
+ by 0x4F9B7E: compClipNotify (compwindow.c:319)
+ by 0x484FC9: miComputeClips (mivaltree.c:476)
+ by 0x48559A: miValidateTree (mivaltree.c:679)
+ by 0x4F0685: MapWindow (window.c:2693)
+ by 0x4A344A: ProcMapWindow (dispatch.c:922)
+ by 0x4A25B5: Dispatch (dispatch.c:560)
+ by 0x4B082A: dix_main (main.c:282)
+ by 0x429233: main (stubmain.c:34)
+ Uninitialised value was created by a heap allocation
+ at 0x4841866: malloc (vg_replace_malloc.c:446)
+ by 0x4F47BC: compRedirectWindow (compalloc.c:171)
+ by 0x4FA8AD: compCreateWindow (compwindow.c:592)
+ by 0x4EBB89: CreateWindow (window.c:925)
+ by 0x4A2E6E: ProcCreateWindow (dispatch.c:768)
+ by 0x4A25B5: Dispatch (dispatch.c:560)
+ by 0x4B082A: dix_main (main.c:282)
+ by 0x429233: main (stubmain.c:34)
+
+ Fix compAllocPixmap() to initialize the border clip even if the creation
+ of the backing pixmap has failed, to avoid depending later on
+ uninitialized border clip values.
+
+ Related to CVE-2025-26599, ZDI-CAN-25851
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Acked-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit b07192a8bedb90b039dc0f70ae69daf047ff9598)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 7169628a1715f8203665f9805c714ed111907914
+Author: Olivier Fourdan <[email protected]>
+Date: Tue Dec 17 15:19:45 2024 +0100
+
+ composite: Handle failure to redirect in compRedirectWindow()
+
+ The function compCheckRedirect() may fail if it cannot allocate the
+ backing pixmap.
+
+ In that case, compRedirectWindow() will return a BadAlloc error.
+
+ However that failure code path will shortcut the validation of the
+ window tree marked just before, which leaves the validate data partly
+ initialized.
+
+ That causes a use of uninitialized pointer later.
+
+ The fix is to not shortcut the call to compHandleMarkedWindows() even in
+ the case of compCheckRedirect() returning an error.
+
+ CVE-2025-26599, ZDI-CAN-25851
+
+ This vulnerability was discovered by:
+ Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Acked-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit c1ff84bef2569b4ba4be59323cf575d1798ba9be)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 32decb1efb89341881de8266f3dd1c3356981bfd
+Author: Olivier Fourdan <[email protected]>
+Date: Mon Dec 16 11:25:11 2024 +0100
+
+ Xi: Fix barrier device search
+
+ The function GetBarrierDevice() would search for the pointer device
+ based on its device id and return the matching value, or supposedly NULL
+ if no match was found.
+
+ Unfortunately, as written, it would return the last element of the list
+ if no matching device id was found which can lead to out of bounds
+ memory access.
+
+ Fix the search function to return NULL if not matching device is found,
+ and adjust the callers to handle the case where the device cannot be
+ found.
+
+ CVE-2025-26598, ZDI-CAN-25740
+
+ This vulnerability was discovered by:
+ Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit bba9df1a9d57234c76c0b93f88dacb143d01bca2)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 8cb23fac62e05d7340e320b2db0dd3e8538d1fba
+Author: Olivier Fourdan <[email protected]>
+Date: Thu Nov 28 14:09:04 2024 +0100
+
+ xkb: Fix buffer overflow in XkbChangeTypesOfKey()
+
+ If XkbChangeTypesOfKey() is called with nGroups == 0, it will resize the
+ key syms to 0 but leave the key actions unchanged.
+
+ If later, the same function is called with a non-zero value for nGroups,
+ this will cause a buffer overflow because the key actions are of the wrong
+ size.
+
+ To avoid the issue, make sure to resize both the key syms and key actions
+ when nGroups is 0.
+
+ CVE-2025-26597, ZDI-CAN-25683
+
+ This vulnerability was discovered by:
+ Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit 0e4ed94952b255c04fe910f6a1d9c852878dcd64)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit b4293650b50efe7832cf9eac71217ad8d6341e02
+Author: Olivier Fourdan <[email protected]>
+Date: Thu Nov 28 11:49:34 2024 +0100
+
+ xkb: Fix computation of XkbSizeKeySyms
+
+ The computation of the length in XkbSizeKeySyms() differs from what is
+ actually written in XkbWriteKeySyms(), leading to a heap overflow.
+
+ Fix the calculation in XkbSizeKeySyms() to match what kbWriteKeySyms()
+ does.
+
+ CVE-2025-26596, ZDI-CAN-25543
+
+ This vulnerability was discovered by:
+ Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit 80d69f01423fc065c950e1ff4e8ddf9f675df773)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit ea526ccb20d222196494b2adf9da52dab68a8997
+Author: Olivier Fourdan <[email protected]>
+Date: Wed Nov 27 14:41:45 2024 +0100
+
+ 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 <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit 11fcda8753e994e15eb915d28cf487660ec8e722)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 5f0c4e0bf254c8b4552da276d01b1b80881b4e26
+Author: Peter Hutterer <[email protected]>
+Date: Wed Dec 4 15:49:43 2024 +1000
+
+ dix: keep a ref to the rootCursor
+
+ CreateCursor returns a cursor with refcount 1 - that refcount is used by
+ the resource system, any caller needs to call RefCursor to get their own
+ reference. That happens correctly for normal cursors but for our
+ rootCursor we keep a variable to the cursor despite not having a ref for
+ ourselves.
+
+ Fix this by reffing/unreffing the rootCursor to ensure our pointer is
+ valid.
+
+ Related to CVE-2025-26594, ZDI-CAN-25544
+
+ Reviewed-by: Olivier Fourdan <[email protected]>
+ (cherry picked from commit b0a09ba6020147961acc62d9c73d807b4cccd9f7)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 9e5ac777d0dfa9d4d78dd68558869489117c3f2c
+Author: Olivier Fourdan <[email protected]>
+Date: Wed Nov 27 11:27:05 2024 +0100
+
+ Cursor: Refuse to free the root cursor
+
+ If a cursor reference count drops to 0, the cursor is freed.
+
+ The root cursor however is referenced with a specific global variable,
+ and when the root cursor is freed, the global variable may still point
+ to freed memory.
+
+ Make sure to prevent the rootCursor from being explicitly freed by a
+ client.
+
+ CVE-2025-26594, ZDI-CAN-25544
+
+ This vulnerability was discovered by:
+ Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
+
+ v2: Explicitly forbid XFreeCursor() on the root cursor (Peter Hutterer
+ <[email protected]>)
+ v3: Return BadCursor instead of BadValue (Michel Dänzer
+ <[email protected]>)
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Suggested-by: Peter Hutterer <[email protected]>
+ Reviewed-by: Peter Hutterer <[email protected]>
+ (cherry picked from commit 01642f263f12becf803b19be4db95a4a83f94acc)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 32887f6ca479be268b7c867b924f80d3fd1611db
+Author: Olivier Fourdan <[email protected]>
+Date: Tue Feb 25 18:47:05 2025 +0100
+
+ test: Fix xsync test
+
+ The xsync test is relying on the values being changed even in the case
+ of a BadMatch value.
+
+ Typically, it updates the delta but does not update the test type
+ comparison, so when passing a negative value, it generates a BadMatch.
+
+ That's actually not correct, and that will fail with the new fixes that
+ check the validity of the values prior to apply the changes.
+
+ Fix the test by updating the test type as needed.
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ (cherry picked from commit 05e54fefafbcec11d847b9f8127bcd4820a20625)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1830>
+
+commit 0c6a7750f2ac9158ace8161f94f7e3bd4c9f5263
+Author: Doug Brown <[email protected]>
+Date: Mon Jul 15 19:44:23 2024 -0700
+
+ dri2: Protect against dri2ClientPrivate assertion failures
+
+ If DRI2ScreenInit hasn't been called yet, DRI2Authenticate and
+ DRI2CreateDrawable2 cause the X server to crash. This has been observed
+ to happen on multiple modern Linux distros in various conditions,
+ including QEMU and VMware VMs. Make these functions more robust in order
+ to prevent the crash.
+
+ This patch was originally provided by Bernhard Übelacker and expanded
+ upon by Mark Wagner.
+
+ Signed-off-by: Doug Brown <[email protected]>
+ Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1053
+ Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1534
+ (cherry picked from commit a0834009cfb10b8982a1f2b47b8ed00de254c2c3)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1824>
+
+commit a651eefc9e525072d99413c1aeabd01858c50819
+Author: Daniel Kahn Gillmor <[email protected]>
+Date: Fri Jan 3 14:41:59 2025 -0500
+
+ autotools: enable static use of Nettle for SHA1
+
+ Debian builds xserver 21 using autotools.
+
+ When debian builds xserver-xorg for constrained environments like the
+ installer, it wants to build against the static library of libnettle
+ for SHA1, see debian/patches/03_static-nettle.diff in the debian
+ repository at
+ https://salsa.debian.org/xorg-team/xserver/xorg-server.git
+
+ This modification of configure.ac makes it possible to build static
+ nettle when needed, while preserving the build to use nettle with a
+ dynamic library when passing a different configuration option.
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1756>
+
+commit e183b62e42f49fa297b5667a82199c7e76fc0a81
+Author: Olivier Fourdan <[email protected]>
+Date: Wed Jan 15 09:40:34 2025 +0100
+
+ os/connection: Make sure partial is initialized
+
+ Following the change in Xtrans 1.5 that allows for partial connections
+ to succeed, we need to make sure partial is properly initialized at
+ first, otherwise we rely on an uninitialized variable.
+
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ Suggested-by: Twaik Yont <[email protected]>
+ Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1783
+ (cherry picked from commit 080fb49eff4de7ec3a29214994d1403e4d877f6a)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit 6115eb1f65dc5198da01042e70d571d85286c31c
+Author: Olivier Fourdan <[email protected]>
+Date: Fri Jan 10 15:02:54 2025 +0100
+
+ xkb: Always use MAP_LENGTH keymap size
+
+ Generating the modifier modmap, the helper function generate_modkeymap()
+ would check the entire range up to the MAP_LENGTH.
+
+ However, the given keymap might have less keycodes than MAP_LENGTH, in
+ which case we would go beyond the size of the modmap, as reported by
+ ASAN:
+
+ ==ERROR: AddressSanitizer: heap-buffer-overflow
+ READ of size 1 at 0x5110001c225b thread T0
+ #0 0x5e7369393873 in generate_modkeymap ../dix/inpututils.c:309
+ #1 0x5e736930dcce in ProcGetModifierMapping ../dix/devices.c:1794
+ #2 0x5e7369336489 in Dispatch ../dix/dispatch.c:550
+ #3 0x5e736934407d in dix_main ../dix/main.c:275
+ #5 0x7e46d47b2ecb in __libc_start_main
+ #6 0x5e73691be324 in _start (xserver/build/hw/xwayland/Xwayland)
+
+ Address is located 0 bytes after 219-byte region
+ allocated by thread T0 here:
+ #0 0x7e46d4cfc542 in realloc
+ #1 0x5e73695aa90e in _XkbCopyClientMap ../xkb/xkbUtils.c:1142
+ #2 0x5e73695aa90e in XkbCopyKeymap ../xkb/xkbUtils.c:1966
+ #3 0x5e73695b1b2f in XkbDeviceApplyKeymap ../xkb/xkbUtils.c:2023
+ #4 0x5e73691c6c18 in keyboard_handle_keymap ../hw/xwayland/xwayland-input.c:1194
+
+ As MAP_LENGTH is used in various code paths where the max keycode might
+ not be easily available, best is to always use MAP_LENGTH to allocate the
+ keymaps so that the code never run past the buffer size.
+
+ If the max key code is smaller than the MAP_LENGTH limit, fill-in the gap
+ with zeros.
+
+ That also simplifies the code slightly as we do not constantly need to
+ reallocate the keymap to adjust to the max key code size.
+
+ Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1780
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ (cherry picked from commit 92bcebfd7e248f695503c0a6e7bee80be4c96834)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit 309ec5a4a71aa189bcf1eb4263d0d34375051856
+Author: Alan Coopersmith <[email protected]>
+Date: Thu Oct 24 15:51:53 2024 -0700
+
+ modesetting: avoid memory leak when ms_present_check_unflip() returns FALSE
+
+ Found by Oracle Parfait 13.3 static analyzer:
+ Memory leak [memory-leak]:
+ Memory leak of pointer event allocated with calloc(1, 16)
+ at line 470 of hw/xfree86/drivers/modesetting/present.c in
+ function 'ms_present_unflip'.
+ event allocated at line 431 with calloc(1, 16)
+ event leaks when ms_present_check_unflip(...) == 0 at line 438
+ and i >= config->num_crtc at line 445
+
+ Fixes: 13c7d53df ("modesetting: Implement page flipping support for Present.")
+ Signed-off-by: Alan Coopersmith <[email protected]>
+ (cherry picked from commit bf63d9b34ef3a24427f884f66a387119dd5cdb8c)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit fbb636bf6b9f8017cf4f905210d15b86a257dad9
+Author: Alan Coopersmith <[email protected]>
+Date: Sat Oct 12 17:33:24 2024 -0700
+
+ dix: limit checks to MAX_VALUATORS when generating Xi events
+
+ Previously, it was looping through sizeof(ev->valuators.mask) * 8
+ valuators, where valuators.mask is defined as an array of
+ (MAX_VALUATORS + 7) / 8 entries. Since MAX_VALUATORS is defined as 36,
+ this made it actually loop through 40 entries. The last 4 bits in this
+ array should never be set, so we should never access memory outside the
+ bounds of the arrays defined to be exactly MAX_VALUATORS in length, but
+ we can make the static analyzer happier and not waste time checking bits
+ that should never be set.
+
+ Found by Oracle Parfait 13.3 static analyzer:
+
+ Read outside array bounds [read-outside-array-bounds]:
+ In array dereference of ev->valuators.data[i] with index i
+ Array size is 36 elements (of 8 bytes each), index >= 0 and index <= 39
+ at line 741 of dix/eventconvert.c in function 'eventToDeviceEvent'.
+
+ Read outside array bounds [read-outside-array-bounds]:
+ In array dereference of ev->valuators.data[i] with index i
+ Array size is 36 elements (of 8 bytes each), index >= 0 and index <= 39
+ at line 808 of dix/eventconvert.c in function 'eventToRawEvent'.
+
+ Read outside array bounds [read-outside-array-bounds]:
+ In array dereference of ev->valuators.data_raw[i] with index i
+ Array size is 36 elements (of 8 bytes each), index >= 0 and index <= 39
+ at line 809 of dix/eventconvert.c in function 'eventToRawEvent'.
+
+ Fixes: b2ba77bac ("dix: add EventToXI2 and GetXI2Type.")
+ Signed-off-by: Alan Coopersmith <[email protected]>
+ (cherry picked from commit b65eea43dd18cdf6d389b7f82ee55ae764c3bf31)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit abfd0215946c23c36a4b1c689ea6b8b7d277e991
+Author: Alan Coopersmith <[email protected]>
+Date: Sat Oct 12 17:01:03 2024 -0700
+
+ dix: fix button offset when generating DeviceButtonStateNotify events
+
+ Found by Oracle Parfait 13.3 static analyzer:
+ Buffer Overflow in STD C function [buffer-overflow-call-stdc]:
+ Buffer overflow in call to memcpy. Buffer &bev->buttons[4] of
+ size 24 is written at an offset of 28
+ Array size is 28 bytes, index is 32
+ at line 743 of dix/enterleave.c in function
+ 'DeliverStateNotifyEvent'.
+
+ Fixes: a85f0d6b9 ("Xi: fix use of button->down - bitflags instead of int arrays.")
+ Reviewed-by: Peter Hutterer <[email protected]>
+ Signed-off-by: Alan Coopersmith <[email protected]>
+ (cherry picked from commit 4b073d65bb5e1f4accb7ed280c8926134582b7ab)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit 5406ddd003c95e2fcbb0411a7afff4daaa9b59f9
+Author: Alan Coopersmith <[email protected]>
+Date: Sat Oct 12 16:38:55 2024 -0700
+
+ render: avoid NULL pointer dereference if PictureFindVisual returns NULL
+
+ Found by Oracle Parfait 13.3:
+ Null pointer dereference [null-pointer-deref]:
+ Read from null pointer pVisual
+ at line 257 of dix/colormap.c in function 'CreateColormap'.
+ Null pointer introduced at line 412 of render/picture.c in
+ function 'PictureFindVisual'.
+ Constant 'NULL' passed into function CreateColormap, argument
+ pVisual, from call at line 431 in function
+ 'PictureInitIndexedFormat'.
+ Function PictureFindVisual may return constant 'NULL' at
+ line 412, called at line 429.
+
+ Fixes: d4a101d4e ("Integration of DAMAGE-XFIXES branch to trunk")
+ Signed-off-by: Alan Coopersmith <[email protected]>
+ (cherry picked from commit 7af077dd2f939b76e7d6ba84250368b6649fb777)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit cec3e55ec96a660a1884fc99784efb4536e557bb
+Author: Alan Coopersmith <[email protected]>
+Date: Sat Oct 12 16:12:13 2024 -0700
+
+ Xi: avoid NULL pointer dereference if GetXTestDevice returns NULL
+
+ The comments in that function say "This only happens if master is a
+ slave device. don't do that" but static analysis doesn't respect that.
+
+ Found by Oracle Parfait 13.3:
+ Null pointer dereference [null-pointer-deref]:
+ Read from null pointer XTestptr
+ at line 274 of Xi/xichangehierarchy.c in function 'remove_master'.
+ Null pointer introduced at line 691 of Xext/xtest.c in function
+ 'GetXTestDevice'.
+ Function GetXTestDevice may return constant 'NULL' at line 691,
+ called at line 273 of Xi/xichangehierarchy.c in function
+ 'remove_master'.
+ Null pointer dereference [null-pointer-deref]:
+ Read from null pointer XTestkeybd
+ at line 279 of Xi/xichangehierarchy.c in function 'remove_master'.
+ Null pointer introduced at line 691 of Xext/xtest.c in function
+ 'GetXTestDevice'.
+ Function GetXTestDevice may return constant 'NULL' at line 691,
+ called at line 278 of Xi/xichangehierarchy.c in function
+ 'remove_master'.
+
+ Fixes: 0814f511d ("input: store the master device's ID in the devPrivate for XTest devices.")
+ Signed-off-by: Alan Coopersmith <[email protected]>
+ (cherry picked from commit d10589cc09c68ad09bebd3a4155c44d1b8f2614b)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit 23b3b7199c69d0052830c2b219ba06cb26950f51
+Author: Alan Coopersmith <[email protected]>
+Date: Sat Oct 12 15:55:06 2024 -0700
+
+ xfree86: avoid memory leak on realloc failure
+
+ Found by Oracle Parfait 13.3 static analyzer:
+ Memory leak [memory-leak]:
+ Memory leak of pointer optname allocated with asprintf(&optname,
+ "\"%s\"", p->name)
+ at line 326 of hw/xfree86/common/xf86Configure.c in function
+ 'configureDeviceSection'.
+ optname allocated at line 309 with asprintf(&optname, "\"%s\"",
+ p->name)
+
+ Fixes: code inherited from XFree86
+ Signed-off-by: Alan Coopersmith <[email protected]>
+ (cherry picked from commit fa711c486a2c2c958c71d7bd8ac0efe552558717)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit cbc2c654e4099e4d8a35e625e010fd73e7a75521
+Author: Alan Coopersmith <[email protected]>
+Date: Mon Sep 9 16:21:46 2024 -0700
+
+ os: NextDPMSTimeout: mark intentional fallthroughs in switch
+
+ The comment at the top of the function tells humans the fallthroughs
+ are intentional, but gcc doesn't parse that.
+
+ Clears 3 -Wimplicit-fallthrough warnings from gcc 14.1
+
+ Signed-off-by: Alan Coopersmith <[email protected]>
+ (cherry picked from commit b306df5a6060beea82b5157c3603593527b220b0)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit e38c23e5b81693a1b23ed91e4ecdead08615ab25
+Author: Tj <[email protected]>
+Date: Fri Jul 19 19:50:56 2024 +0200
+
+ xfree86: fbdevhw: fix pci detection on recent Linux
+
+ Linux kernel v6.9 has changed the symlink to point to the parent device. This
+ breaks fbdev_open() detection logic. Change it to use the subsystem symlink
+ instead which will remain stable.
+
+ Kernel v6.8:
+
+ [ 14.067] (II) fbdev_open() sysfs_path=/sys/class/graphics/fb0
+ [ 14.067] (II) fbdev_open() buf=../../devices/platform/vesa-framebuffer.0/graphics/fb0
+
+ Kernel v6.9:
+
+ [ 15.609] (II) fbdev_open() sysfs_path=/sys/class/graphics/fb0
+ [ 15.609] (II) fbdev_open() buf=../../devices/pci0000:00/0000:00:01.0/vesa-framebuffer.0/graphics/fb0
+
+ Originally found in automated Debian ISO QA testing [0] and confirmed in Linux [1].
+
+ Tested on kernels v6.9.7 and v6.8.12
+
+ [0] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1075713
+ [1] https://lore.kernel.org/lkml/lLyvPFC_APGHNfyGNHRpQy5izBikkaTPOpHooZIT3fFAoJPquSI31ZMueA99XTdr8ysir3X7O7IMdc6za-0m79vr_claeparHhoRouVgHOI=@proton.me/
+
+ Fixes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1714
+ Signed-off-by: Tj <[email protected]>
+ Reviewed-by: Thomas Zimmermann <[email protected]>
+ Reviewed-by: Enrico Weigelt, metux IT consult <[email protected]>
+ (cherry picked from commit 728b54528d37ffa27b07c9b181c5ed8d2d359379)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit ac48573a9bc943572621aa4d0254f32fca58f7d4
+Author: Olivier Fourdan <[email protected]>
+Date: Mon Sep 23 09:27:21 2024 +0200
+
+ os: Fix NULL pointer dereference
+
+ RemoveHost() can be called from DisableLocalHost() with a NULL client,
+ but doesn't actually check whether the given client pointer is valid on
+ error and assigns the error value unconditionally, leading to a possible
+ NULL pointer dereference and a crash of the Xserver.
+
+ To avoid the issue, simply check whether the client pointer is not NULL
+ prior to assign the errorValue.
+
+ Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1752
+ See-also: https://bugzilla.redhat.com/2313799
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ (cherry picked from commit 57a446c0f98693bd2e0263e91213344d870f4e03)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit f241e4f884be062f947f5dab35465549b8bffdf8
+Author: Peter Hutterer <[email protected]>
+Date: Tue Jan 30 11:11:54 2024 +1000
+
+ Xi: when removing a master search for a disabled paired device
+
+ If either the master pointer or keyboard was disabled, the respective
+ GetMaster() call returns NULL, causing a segfault later accessing the
+ deviceid.
+
+ Fix this by looking in the off_devices list for any master
+ device of the type we're looking for. Master devices lose the pairing
+ when disabled (on enabling a keyboard we simply pair with the first
+ available unpaired pointer).
+
+ And for readability, split the device we get from the protocol request
+ into a new "dev" variable instead of re-using ptr.
+
+ Fixes #1611
+
+ (cherry picked from commit e7c876ab0b0daa546a23d4ef82537fdf8fd88e04)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit de2e2e8d45eaffd8b961d22ba91d45ed4ffb9ea0
+Author: Peter Hutterer <[email protected]>
+Date: Tue Jan 30 10:44:58 2024 +1000
+
+ dix: don't push the XKB state to a non-existing master keyboard
+
+ If our master keyboard is disabled, GetMaster() returns NULL and
+ we segfault in XkbPushLockedStateToSlaves().
+
+ Fixes 45fb3a934dc0db51584aba37c2f9d73deff9191d
+ Fixes #1611
+
+ (cherry picked from commit 9b983fecf999b9f50946973f2379a5ce00491cad)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit 743f66d6a29d439aac7b9ef2816009f311d58aec
+Author: Olivier Fourdan <[email protected]>
+Date: Mon Jul 29 11:54:15 2024 +0200
+
+ glamor: Fix possible double-free
+
+ If glamor_link_glsl_prog() fails, we may jump to the failed code path
+ which frees the variable vs_prog_string and fs_prog_string.
+
+ But those variables were already freed just before, so in that case we
+ end up freeing the memory twice.
+
+ Simply move the free at the end of the success code path so we are sure
+ to free the values only once, either in the successful of failed code
+ paths.
+
+ Fixes: 2906ee5e4 - glamor: Fix leak in glamor_build_program()
+ Signed-off-by: Olivier Fourdan <[email protected]>
+ (cherry picked from commit 34ea020344ef5f2ea8ffce78c7e1abd6436b21ec)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit 3bda7d119a289bc7706123b0544bb6ff792986ad
+Author: Patrik Jakobsson <[email protected]>
+Date: Wed Jun 9 20:58:59 2021 +0200
+
+ modesetting: Fix dirty updates for sw rotation
+
+ Rotation is broken for all drm drivers not providing hardware rotation
+ support. Drivers that give direct access to vram and not needing dirty
+ updates still work but only by accident. The problem is caused by
+ modesetting not sending the correct fb_id to drmModeDirtyFB() and
+ passing the damage rects in the rotated state and not as the crtc
+ expects them. This patch takes care of both problems.
+
+ Signed-off-by: Patrik Jakobsson <[email protected]>
+ (cherry picked from commit db9e9d45e8ba73510f11eb9e534c176102f6623e)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1767>
+
+commit b5f1b211b4bbbf4049b422b0e08e02efaaf7a26a
+Author: Matt Turner <[email protected]>
+Date: Tue Dec 17 12:39:36 2024 -0500
+
+ xserver 21.1.15
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1753>
+
+commit 203e0667d21953737537d1991ec76b768fe588ae
+Author: Matt Turner <[email protected]>
+Date: Mon Dec 16 22:38:24 2024 -0500
+
+ hw/xfree86: Fix -Wincompatible-pointer-types sbus compile failure
+
+ ```
+ ../hw/xfree86/common/xf86sbusBus.c: In function ‘xf86SbusConfigureNewDev’:
+ ../hw/xfree86/common/xf86sbusBus.c:751:21: error: passing argument 1 of ‘XNFasprintf’ from incompatible pointer type [-Wincompatible-pointer-types]
+ 751 | XNFasprintf(&GDev->busID, "SBUS:%s", promPath);
+ | ^~~~~~~~~~~~
+ | |
+ | const char **
+ ```
+
+ Apply the same fix as in commit e1e01d2e3 ("xfree86/common: Warning
+ fixes. Mostly const string handling.")
+
+ (cherry picked from commit bdacb100bf6a551bc9045f7f0048cbb99eb3db5a)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1752>
+
+commit 1958e0f25b6b46940625b407a5e15b39fa648b26
+Author: Matt Turner <[email protected]>
+Date: Mon Dec 16 22:38:03 2024 -0500
+
+ hw/xfree86: Fix -Wmissing-prototypes warnings
+
+ None of these functions are used elsewhere in the Xserver nor in any of
+ the xf86-video-sun* DDXs.
+
+ (cherry picked from commit 00a96cd82a7be08f421dcbe3aa628fdbc7c8d856)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1752>
+
+commit c3144adcbc01d4f9f4d1e42323fc51be689bee17
+Author: Eric Curtin <[email protected]>
+Date: Fri Dec 16 11:10:12 2022 +0000
+
+ config: add a quirk for Apple Silicon appledrm
+
+ Xorg server does not correctly select the DCP for the display without a
+ quirk on Apple Silicon.
+
+ Signed-off-by: Eric Curtin <[email protected]>
+ Suggested-by: Hector Martin <[email protected]>
+ (cherry picked from commit 39934a656a44722d16a80bf4db411c53e2d67b38)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1746>
+
+commit 1a836cd47be8177cb3ab3ac2bc90e926c24c0cac
+Author: Alan Coopersmith <[email protected]>
+Date: Wed Oct 30 10:34:14 2024 -0700
+
+ dix-config.h: add HAVE_SOCKLEN_T definition
+
+ Needed to build with IPv6 disabled using gcc 14 on some platforms to avoid:
+
+ In file included from /usr/X11/include/X11/Xtrans/transport.c:67,
+ from xstrans.c:17:
+ /usr/X11/include/X11/Xtrans/Xtranssock.c: In function ‘_XSERVTransSocketOpen’:
+ /usr/X11/include/X11/Xtrans/Xtranssock.c:467:28: error: passing argument 5
+ of ‘getsockopt’ from incompatible pointer type [-Wincompatible-pointer-types]
+ 467 | (char *) &val, &len) == 0 && val < 64 * 1024)
+ | ^~~~
+ | |
+ | size_t * {aka long unsigned int *}
+
+ (Backport to xserver-21.1-branch of commit a1b5aa5a7f12adc43720a5ae11e6c.
+ Backport adds autoconf equivalent to meson change from master branch.)
+
+ Signed-off-by: Alan Coopersmith <[email protected]>
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1737>
+
+commit 18c9cd6ab799cf8bd7fb90b4965455bece0046c3
+Author: Joaquim Monteiro <[email protected]>
+Date: Sun Jun 23 21:23:47 2024 +0100
+
+ os: Fix siHostnameAddrMatch in the case where h_addr isn't defined
+
+ When IPv6 support isn't enabled, and h_addr isn't defined,
+ there is no for loop, so the break statement is invalid.
+
+ Signed-off-by: Joaquim Monteiro <[email protected]>
+ (cherry picked from commit a6a993f9508ff0bd6f19695b2dfaef170c652525)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1737>
+
+commit e8302b707d6fddf8e27daa0b3ef70fd3efec823c
+Author: Joaquim Monteiro <[email protected]>
+Date: Sun Jun 23 21:17:25 2024 +0100
+
+ os: Fix assignment with incompatible pointer type
+
+ struct hostent->h_addr_list is of type char**, not const char**.
+ GCC considers this an error when in C99 mode or later.
+
+ Signed-off-by: Joaquim Monteiro <[email protected]>
+ (cherry picked from commit 0ddcd8785199c08d9bded3c767a3b1227c670999)
+
+ Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1737>
+
commit b25ad9b8f0ebcc3ebe09ce9991410c60f3a8b2ce
Author: José Expósito <[email protected]>
Date: Tue Oct 29 14:40:34 2024 +0100
Index: xsrc/external/mit/xorg-server/dist/configure
diff -u xsrc/external/mit/xorg-server/dist/configure:1.13.2.5 xsrc/external/mit/xorg-server/dist/configure:1.13.2.6
--- xsrc/external/mit/xorg-server/dist/configure:1.13.2.5 Sat Nov 2 10:35:49 2024
+++ xsrc/external/mit/xorg-server/dist/configure Thu Feb 27 10:16:43 2025
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for xorg-server 21.1.14.
+# Generated by GNU Autoconf 2.72 for xorg-server 21.1.16.
#
# Report bugs to <https://gitlab.freedesktop.org/xorg/xserver/issues>.
#
@@ -675,8 +675,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='xorg-server'
PACKAGE_TARNAME='xorg-server'
-PACKAGE_VERSION='21.1.14'
-PACKAGE_STRING='xorg-server 21.1.14'
+PACKAGE_VERSION='21.1.16'
+PACKAGE_STRING='xorg-server 21.1.16'
PACKAGE_BUGREPORT='https://gitlab.freedesktop.org/xorg/xserver/issues'
PACKAGE_URL=''
@@ -1999,7 +1999,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-'configure' configures xorg-server 21.1.14 to adapt to many kinds of systems.
+'configure' configures xorg-server 21.1.16 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -2070,7 +2070,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of xorg-server 21.1.14:";;
+ short | recursive ) echo "Configuration of xorg-server 21.1.16:";;
esac
cat <<\_ACEOF
@@ -2256,10 +2256,10 @@ Optional Packages:
org.x)
--with-bundle-version=VERSION
Version to use for X11.app's CFBundleVersion
- (default: 21.1.14)
+ (default: 21.1.16)
--with-bundle-version-string=VERSION
Version to use for X11.app's
- CFBundleShortVersionString (default: 21.1.14)
+ CFBundleShortVersionString (default: 21.1.16)
--with-sparkle-feed-url=URL
URL for the Sparkle feed (default:
https://www.xquartz.org/releases/sparkle/release.xml)
@@ -2269,7 +2269,7 @@ Optional Packages:
--with-systemd-daemon support systemd socket activation (default: auto)
--with-xkb-bin-directory=DIR
Directory containing xkbcomp program (default: auto)
- --with-sha1=libc|libmd|libnettle|libgcrypt|libcrypto|libsha1|CommonCrypto|CryptoAPI
+ --with-sha1=libc|libmd|libnettle|nettlestatic|libgcrypt|libcrypto|libsha1|CommonCrypto|CryptoAPI
choose SHA1 implementation
Some influential environment variables:
@@ -2476,7 +2476,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-xorg-server configure 21.1.14
+xorg-server configure 21.1.16
generated by GNU Autoconf 2.72
Copyright (C) 2023 Free Software Foundation, Inc.
@@ -3154,7 +3154,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by xorg-server $as_me 21.1.14, which was
+It was created by xorg-server $as_me 21.1.16, which was
generated by GNU Autoconf 2.72. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3929,7 +3929,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLA
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-RELEASE_DATE="2024-10-29"
+RELEASE_DATE="2025-02-25"
RELEASE_NAME="Caramel Ice Cream"
@@ -4452,7 +4452,7 @@ fi
# Define the identity of the package.
PACKAGE='xorg-server'
- VERSION='21.1.14'
+ VERSION='21.1.16'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -26036,7 +26036,7 @@ if test ${with_bundle_version+y}
then :
withval=$with_bundle_version; BUNDLE_VERSION="${withval}"
else case e in #(
- e) BUNDLE_VERSION="21.1.14" ;;
+ e) BUNDLE_VERSION="21.1.16" ;;
esac
fi
@@ -30636,6 +30636,15 @@ printf "%s\n" "#define HAVE_SHA1_IN_LIBN
SHA1_LIBS=-lnettle
fi
+if test "x$with_sha1" = xnettlestatic && test "x$HAVE_LIBNETTLE" != xyes; then
+ as_fn_error $? "nettlestatic requested but libnettle not found" "$LINENO" 5
+fi
+if test "x$with_sha1" = xnettlestatic; then
+
+printf "%s\n" "#define HAVE_SHA1_IN_LIBNETTLE 1" >>confdefs.h
+
+ SHA1_LIBS=-l:libnettle.a
+fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcry_md_open in -lgcrypt" >&5
printf %s "checking for gcry_md_open in -lgcrypt... " >&6; }
if test ${ac_cv_lib_gcrypt_gcry_md_open+y}
@@ -34805,7 +34814,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by xorg-server $as_me 21.1.14, which was
+This file was extended by xorg-server $as_me 21.1.16, which was
generated by GNU Autoconf 2.72. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -34873,7 +34882,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-xorg-server config.status 21.1.14
+xorg-server config.status 21.1.16
configured by $0, generated by GNU Autoconf 2.72,
with options \\"\$ac_cs_config\\"
Index: xsrc/external/mit/xorg-server/dist/configure.ac
diff -u xsrc/external/mit/xorg-server/dist/configure.ac:1.15.2.5 xsrc/external/mit/xorg-server/dist/configure.ac:1.15.2.6
--- xsrc/external/mit/xorg-server/dist/configure.ac:1.15.2.5 Sat Nov 2 10:35:51 2024
+++ xsrc/external/mit/xorg-server/dist/configure.ac Thu Feb 27 10:16:44 2025
@@ -26,8 +26,8 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.60)
-AC_INIT([xorg-server], 21.1.14, [https://gitlab.freedesktop.org/xorg/xserver/issues], xorg-server)
-RELEASE_DATE="2024-10-29"
+AC_INIT([xorg-server], 21.1.16, [https://gitlab.freedesktop.org/xorg/xserver/issues], xorg-server)
+RELEASE_DATE="2025-02-25"
RELEASE_NAME="Caramel Ice Cream"
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_MACRO_DIR([m4])
@@ -1493,7 +1493,7 @@ CORE_INCS='-I$(top_srcdir)/include -I$(t
# SHA1 hashing
AC_ARG_WITH([sha1],
- [AS_HELP_STRING([--with-sha1=libc|libmd|libnettle|libgcrypt|libcrypto|libsha1|CommonCrypto|CryptoAPI],
+ [AS_HELP_STRING([--with-sha1=libc|libmd|libnettle|nettlestatic|libgcrypt|libcrypto|libsha1|CommonCrypto|CryptoAPI],
[choose SHA1 implementation])])
AC_CHECK_FUNC([SHA1Init], [HAVE_SHA1_IN_LIBC=yes])
if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_LIBC" = xyes; then
@@ -1568,6 +1568,14 @@ if test "x$with_sha1" = xlibnettle; then
[Use libnettle SHA1 functions])
SHA1_LIBS=-lnettle
fi
+if test "x$with_sha1" = xnettlestatic && test "x$HAVE_LIBNETTLE" != xyes; then
+ AC_MSG_ERROR([nettlestatic requested but libnettle not found])
+fi
+if test "x$with_sha1" = xnettlestatic; then
+ AC_DEFINE([HAVE_SHA1_IN_LIBNETTLE], [1],
+ [Use static libnettle SHA1 functions])
+ SHA1_LIBS=-l:libnettle.a
+fi
AC_CHECK_LIB([gcrypt], [gcry_md_open], [HAVE_LIBGCRYPT=yes])
if test "x$with_sha1" = x && test "x$HAVE_LIBGCRYPT" = xyes; then
with_sha1=libgcrypt
Index: xsrc/external/mit/xorg-server/dist/meson.build
diff -u xsrc/external/mit/xorg-server/dist/meson.build:1.1.1.10.2.5 xsrc/external/mit/xorg-server/dist/meson.build:1.1.1.10.2.6
--- xsrc/external/mit/xorg-server/dist/meson.build:1.1.1.10.2.5 Sat Nov 2 10:35:51 2024
+++ xsrc/external/mit/xorg-server/dist/meson.build Thu Feb 27 10:16:44 2025
@@ -3,10 +3,10 @@ project('xserver', 'c',
'buildtype=debugoptimized',
'c_std=gnu99',
],
- version: '21.1.14',
+ version: '21.1.16',
meson_version: '>= 0.47.0',
)
-release_date = '2024-10-29'
+release_date = '2025-02-25'
add_project_arguments('-DHAVE_DIX_CONFIG_H', language: ['c', 'objc'])
cc = meson.get_compiler('c')
Index: xsrc/external/mit/xorg-server/dist/Xext/sync.c
diff -u xsrc/external/mit/xorg-server/dist/Xext/sync.c:1.12.2.1 xsrc/external/mit/xorg-server/dist/Xext/sync.c:1.12.2.2
--- xsrc/external/mit/xorg-server/dist/Xext/sync.c:1.12.2.1 Sat Nov 2 10:35:51 2024
+++ xsrc/external/mit/xorg-server/dist/Xext/sync.c Thu Feb 27 10:16:45 2025
@@ -199,8 +199,8 @@ SyncAddTriggerToSyncObject(SyncTrigger *
return Success;
}
- if (!(pCur = malloc(sizeof(SyncTriggerList))))
- return BadAlloc;
+ /* Failure is not an option, it's succeed or burst! */
+ pCur = XNFalloc(sizeof(SyncTriggerList));
pCur->pTrigger = pTrigger;
pCur->next = pTrigger->pSync->pTriglist;
@@ -329,11 +329,6 @@ SyncInitTrigger(ClientPtr client, SyncTr
client->errorValue = syncObject;
return rc;
}
- if (pSync != pTrigger->pSync) { /* new counter for trigger */
- SyncDeleteTriggerFromSyncObject(pTrigger);
- pTrigger->pSync = pSync;
- newSyncObject = TRUE;
- }
}
/* if system counter, ask it what the current value is */
@@ -355,6 +350,24 @@ SyncInitTrigger(ClientPtr client, SyncTr
}
}
+ if (changes & (XSyncCAValueType | XSyncCAValue)) {
+ if (pTrigger->value_type == XSyncAbsolute)
+ pTrigger->test_value = pTrigger->wait_value;
+ else { /* relative */
+ Bool overflow;
+
+ if (pCounter == NULL)
+ return BadMatch;
+
+ overflow = checked_int64_add(&pTrigger->test_value,
+ pCounter->value, pTrigger->wait_value);
+ if (overflow) {
+ client->errorValue = pTrigger->wait_value >> 32;
+ return BadValue;
+ }
+ }
+ }
+
if (changes & XSyncCATestType) {
if (pSync && SYNC_FENCE == pSync->type) {
@@ -383,21 +396,11 @@ SyncInitTrigger(ClientPtr client, SyncTr
}
}
- if (changes & (XSyncCAValueType | XSyncCAValue)) {
- if (pTrigger->value_type == XSyncAbsolute)
- pTrigger->test_value = pTrigger->wait_value;
- else { /* relative */
- Bool overflow;
-
- if (pCounter == NULL)
- return BadMatch;
-
- overflow = checked_int64_add(&pTrigger->test_value,
- pCounter->value, pTrigger->wait_value);
- if (overflow) {
- client->errorValue = pTrigger->wait_value >> 32;
- return BadValue;
- }
+ if (changes & XSyncCACounter) {
+ if (pSync != pTrigger->pSync) { /* new counter for trigger */
+ SyncDeleteTriggerFromSyncObject(pTrigger);
+ pTrigger->pSync = pSync;
+ newSyncObject = TRUE;
}
}
@@ -405,8 +408,7 @@ SyncInitTrigger(ClientPtr client, SyncTr
* a new counter on a trigger
*/
if (newSyncObject) {
- if ((rc = SyncAddTriggerToSyncObject(pTrigger)) != Success)
- return rc;
+ SyncAddTriggerToSyncObject(pTrigger);
}
else if (pCounter && IsSystemCounter(pCounter)) {
SyncComputeBracketValues(pCounter);
@@ -797,8 +799,14 @@ SyncChangeAlarmAttributes(ClientPtr clie
int status;
XSyncCounter counter;
Mask origmask = mask;
-
- counter = pAlarm->trigger.pSync ? pAlarm->trigger.pSync->id : None;
+ SyncTrigger trigger;
+ Bool select_events_changed = FALSE;
+ Bool select_events_value = FALSE;
+ int64_t delta;
+
+ trigger = pAlarm->trigger;
+ delta = pAlarm->delta;
+ counter = trigger.pSync ? trigger.pSync->id : None;
while (mask) {
int index2 = lowbit(mask);
@@ -814,24 +822,24 @@ SyncChangeAlarmAttributes(ClientPtr clie
case XSyncCAValueType:
mask &= ~XSyncCAValueType;
/* sanity check in SyncInitTrigger */
- pAlarm->trigger.value_type = *values++;
+ trigger.value_type = *values++;
break;
case XSyncCAValue:
mask &= ~XSyncCAValue;
- pAlarm->trigger.wait_value = ((int64_t)values[0] << 32) | values[1];
+ trigger.wait_value = ((int64_t)values[0] << 32) | values[1];
values += 2;
break;
case XSyncCATestType:
mask &= ~XSyncCATestType;
/* sanity check in SyncInitTrigger */
- pAlarm->trigger.test_type = *values++;
+ trigger.test_type = *values++;
break;
case XSyncCADelta:
mask &= ~XSyncCADelta;
- pAlarm->delta = ((int64_t)values[0] << 32) | values[1];
+ delta = ((int64_t)values[0] << 32) | values[1];
values += 2;
break;
@@ -841,10 +849,8 @@ SyncChangeAlarmAttributes(ClientPtr clie
client->errorValue = *values;
return BadValue;
}
- status = SyncEventSelectForAlarm(pAlarm, client,
- (Bool) (*values++));
- if (status != Success)
- return status;
+ select_events_value = (Bool) (*values++);
+ select_events_changed = TRUE;
break;
default:
@@ -853,25 +859,33 @@ SyncChangeAlarmAttributes(ClientPtr clie
}
}
+ if (select_events_changed) {
+ status = SyncEventSelectForAlarm(pAlarm, client, select_events_value);
+ if (status != Success)
+ return status;
+ }
+
/* "If the test-type is PositiveComparison or PositiveTransition
* and delta is less than zero, or if the test-type is
* NegativeComparison or NegativeTransition and delta is
* greater than zero, a Match error is generated."
*/
if (origmask & (XSyncCADelta | XSyncCATestType)) {
- if ((((pAlarm->trigger.test_type == XSyncPositiveComparison) ||
- (pAlarm->trigger.test_type == XSyncPositiveTransition))
- && pAlarm->delta < 0)
+ if ((((trigger.test_type == XSyncPositiveComparison) ||
+ (trigger.test_type == XSyncPositiveTransition))
+ && delta < 0)
||
- (((pAlarm->trigger.test_type == XSyncNegativeComparison) ||
- (pAlarm->trigger.test_type == XSyncNegativeTransition))
- && pAlarm->delta > 0)
+ (((trigger.test_type == XSyncNegativeComparison) ||
+ (trigger.test_type == XSyncNegativeTransition))
+ && delta > 0)
) {
return BadMatch;
}
}
/* postpone this until now, when we're sure nothing else can go wrong */
+ pAlarm->delta = delta;
+ pAlarm->trigger = trigger;
if ((status = SyncInitTrigger(client, &pAlarm->trigger, counter, RTCounter,
origmask & XSyncCAAllTrigger)) != Success)
return status;
Index: xsrc/external/mit/xorg-server/dist/Xi/xibarriers.c
diff -u xsrc/external/mit/xorg-server/dist/Xi/xibarriers.c:1.4 xsrc/external/mit/xorg-server/dist/Xi/xibarriers.c:1.4.4.1
--- xsrc/external/mit/xorg-server/dist/Xi/xibarriers.c:1.4 Sun Mar 3 22:01:08 2019
+++ xsrc/external/mit/xorg-server/dist/Xi/xibarriers.c Thu Feb 27 10:16:45 2025
@@ -129,14 +129,15 @@ static void FreePointerBarrierClient(str
static struct PointerBarrierDevice *GetBarrierDevice(struct PointerBarrierClient *c, int deviceid)
{
- struct PointerBarrierDevice *pbd = NULL;
+ struct PointerBarrierDevice *p, *pbd = NULL;
- xorg_list_for_each_entry(pbd, &c->per_device, entry) {
- if (pbd->deviceid == deviceid)
+ xorg_list_for_each_entry(p, &c->per_device, entry) {
+ if (p->deviceid == deviceid) {
+ pbd = p;
break;
+ }
}
- BUG_WARN(!pbd);
return pbd;
}
@@ -337,6 +338,9 @@ barrier_find_nearest(BarrierScreenPtr cs
double distance;
pbd = GetBarrierDevice(c, dev->id);
+ if (!pbd)
+ continue;
+
if (pbd->seen)
continue;
@@ -445,6 +449,9 @@ input_constrain_cursor(DeviceIntPtr dev,
nearest = &c->barrier;
pbd = GetBarrierDevice(c, master->id);
+ if (!pbd)
+ continue;
+
new_sequence = !pbd->hit;
pbd->seen = TRUE;
@@ -485,6 +492,9 @@ input_constrain_cursor(DeviceIntPtr dev,
int flags = 0;
pbd = GetBarrierDevice(c, master->id);
+ if (!pbd)
+ continue;
+
pbd->seen = FALSE;
if (!pbd->hit)
continue;
@@ -679,6 +689,9 @@ BarrierFreeBarrier(void *data, XID id)
continue;
pbd = GetBarrierDevice(c, dev->id);
+ if (!pbd)
+ continue;
+
if (!pbd->hit)
continue;
@@ -738,6 +751,8 @@ static void remove_master_func(void *res
barrier = container_of(b, struct PointerBarrierClient, barrier);
pbd = GetBarrierDevice(barrier, *deviceid);
+ if (!pbd)
+ return;
if (pbd->hit) {
BarrierEvent ev = {
@@ -903,6 +918,10 @@ ProcXIBarrierReleasePointer(ClientPtr cl
barrier = container_of(b, struct PointerBarrierClient, barrier);
pbd = GetBarrierDevice(barrier, dev->id);
+ if (!pbd) {
+ client->errorValue = dev->id;
+ return BadDevice;
+ }
if (pbd->barrier_event_id == event_id)
pbd->release_event_id = event_id;
Index: xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c
diff -u xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c:1.6.2.1 xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c:1.6.2.2
--- xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c:1.6.2.1 Sat Nov 2 10:35:51 2024
+++ xsrc/external/mit/xorg-server/dist/Xi/xichangehierarchy.c Thu Feb 27 10:16:45 2025
@@ -46,6 +46,7 @@
#include "exevents.h"
#include "exglobals.h"
#include "geext.h"
+#include "misc.h"
#include "xace.h"
#include "xiquerydevice.h" /* for GetDeviceUse */
@@ -215,46 +216,68 @@ disable_clientpointer(DeviceIntPtr dev)
}
}
+static DeviceIntPtr
+find_disabled_master(int type)
+{
+ DeviceIntPtr dev;
+
+ /* Once a master device is disabled it loses the pairing, so returning the first
+ * match is good enough */
+ for (dev = inputInfo.off_devices; dev; dev = dev->next) {
+ if (dev->type == type)
+ return dev;
+ }
+
+ return NULL;
+}
+
static int
remove_master(ClientPtr client, xXIRemoveMasterInfo * r, int flags[MAXDEVICES])
{
- DeviceIntPtr ptr, keybd, XTestptr, XTestkeybd;
+ DeviceIntPtr dev, ptr, keybd, XTestptr, XTestkeybd;
int rc = Success;
if (r->return_mode != XIAttachToMaster && r->return_mode != XIFloating)
return BadValue;
- rc = dixLookupDevice(&ptr, r->deviceid, client, DixDestroyAccess);
+ rc = dixLookupDevice(&dev, r->deviceid, client, DixDestroyAccess);
if (rc != Success)
goto unwind;
- if (!IsMaster(ptr)) {
+ if (!IsMaster(dev)) {
client->errorValue = r->deviceid;
rc = BadDevice;
goto unwind;
}
/* XXX: For now, don't allow removal of VCP, VCK */
- if (ptr == inputInfo.pointer ||ptr == inputInfo.keyboard) {
+ if (dev == inputInfo.pointer || dev == inputInfo.keyboard) {
rc = BadDevice;
goto unwind;
}
- ptr = GetMaster(ptr, MASTER_POINTER);
+ if ((ptr = GetMaster(dev, MASTER_POINTER)) == NULL)
+ ptr = find_disabled_master(MASTER_POINTER);
+ BUG_RETURN_VAL(ptr == NULL, BadDevice);
rc = dixLookupDevice(&ptr, ptr->id, client, DixDestroyAccess);
if (rc != Success)
goto unwind;
- keybd = GetMaster(ptr, MASTER_KEYBOARD);
+
+ if ((keybd = GetMaster(dev, MASTER_KEYBOARD)) == NULL)
+ keybd = find_disabled_master(MASTER_KEYBOARD);
+ BUG_RETURN_VAL(keybd == NULL, BadDevice);
rc = dixLookupDevice(&keybd, keybd->id, client, DixDestroyAccess);
if (rc != Success)
goto unwind;
XTestptr = GetXTestDevice(ptr);
+ BUG_RETURN_VAL(XTestptr == NULL, BadDevice);
rc = dixLookupDevice(&XTestptr, XTestptr->id, client, DixDestroyAccess);
if (rc != Success)
goto unwind;
XTestkeybd = GetXTestDevice(keybd);
+ BUG_RETURN_VAL(XTestkeybd == NULL, BadDevice);
rc = dixLookupDevice(&XTestkeybd, XTestkeybd->id, client, DixDestroyAccess);
if (rc != Success)
goto unwind;
Index: xsrc/external/mit/xorg-server/dist/composite/compalloc.c
diff -u xsrc/external/mit/xorg-server/dist/composite/compalloc.c:1.1.1.8 xsrc/external/mit/xorg-server/dist/composite/compalloc.c:1.1.1.8.2.1
--- xsrc/external/mit/xorg-server/dist/composite/compalloc.c:1.1.1.8 Fri Jul 15 02:12:48 2022
+++ xsrc/external/mit/xorg-server/dist/composite/compalloc.c Thu Feb 27 10:16:45 2025
@@ -140,6 +140,7 @@ compRedirectWindow(ClientPtr pClient, Wi
CompScreenPtr cs = GetCompScreen(pWin->drawable.pScreen);
WindowPtr pLayerWin;
Bool anyMarked = FALSE;
+ int status = Success;
if (pWin == cs->pOverlayWin) {
return Success;
@@ -218,13 +219,13 @@ compRedirectWindow(ClientPtr pClient, Wi
if (!compCheckRedirect(pWin)) {
FreeResource(ccw->id, RT_NONE);
- return BadAlloc;
+ status = BadAlloc;
}
if (anyMarked)
compHandleMarkedWindows(pWin, pLayerWin);
- return Success;
+ return status;
}
void
@@ -605,9 +606,12 @@ compAllocPixmap(WindowPtr pWin)
int h = pWin->drawable.height + (bw << 1);
PixmapPtr pPixmap = compNewPixmap(pWin, x, y, w, h);
CompWindowPtr cw = GetCompWindow(pWin);
+ Bool status;
- if (!pPixmap)
- return FALSE;
+ if (!pPixmap) {
+ status = FALSE;
+ goto out;
+ }
if (cw->update == CompositeRedirectAutomatic)
pWin->redirectDraw = RedirectDrawAutomatic;
else
@@ -621,14 +625,16 @@ compAllocPixmap(WindowPtr pWin)
DamageRegister(&pWin->drawable, cw->damage);
cw->damageRegistered = TRUE;
}
+ status = TRUE;
+out:
/* Make sure our borderClip is up to date */
RegionUninit(&cw->borderClip);
RegionCopy(&cw->borderClip, &pWin->borderClip);
cw->borderClipX = pWin->drawable.x;
cw->borderClipY = pWin->drawable.y;
- return TRUE;
+ return status;
}
void
Index: xsrc/external/mit/xorg-server/dist/config/10-quirks.conf
diff -u xsrc/external/mit/xorg-server/dist/config/10-quirks.conf:1.1.1.1 xsrc/external/mit/xorg-server/dist/config/10-quirks.conf:1.1.1.1.6.1
--- xsrc/external/mit/xorg-server/dist/config/10-quirks.conf:1.1.1.1 Wed Aug 10 07:44:32 2016
+++ xsrc/external/mit/xorg-server/dist/config/10-quirks.conf Thu Feb 27 10:16:45 2025
@@ -36,3 +36,13 @@ Section "InputClass"
MatchDriver "evdev"
Option "TypeName" "MOUSE"
EndSection
+
+# https://bugzilla.redhat.com/show_bug.cgi?id=2152414
+# Xorg server does not correctly select the DCP for the display without
+# a quirk on Apple Silicon
+Section "OutputClass"
+ Identifier "appledrm"
+ MatchDriver "apple"
+ Driver "modesetting"
+ Option "PrimaryGPU" "true"
+EndSection
Index: xsrc/external/mit/xorg-server/dist/dix/devices.c
diff -u xsrc/external/mit/xorg-server/dist/dix/devices.c:1.13.2.1 xsrc/external/mit/xorg-server/dist/dix/devices.c:1.13.2.2
--- xsrc/external/mit/xorg-server/dist/dix/devices.c:1.13.2.1 Sat Nov 2 10:35:51 2024
+++ xsrc/external/mit/xorg-server/dist/dix/devices.c Thu Feb 27 10:16:45 2025
@@ -963,6 +963,23 @@ FreeAllDeviceClasses(ClassesPtr classes)
}
+static void
+FreePendingFrozenDeviceEvents(DeviceIntPtr dev)
+{
+ QdEventPtr qe, tmp;
+
+ if (!dev->deviceGrab.sync.frozen)
+ return;
+
+ /* Dequeue any frozen pending events */
+ xorg_list_for_each_entry_safe(qe, tmp, &syncEvents.pending, next) {
+ if (qe->device == dev) {
+ xorg_list_del(&qe->next);
+ free(qe);
+ }
+ }
+}
+
/**
* Close down a device and free all resources.
* Once closed down, the driver will probably not expect you that you'll ever
@@ -1027,6 +1044,7 @@ CloseDevice(DeviceIntPtr dev)
free(dev->last.touches[j].valuators);
free(dev->last.touches);
dev->config_info = NULL;
+ FreePendingFrozenDeviceEvents(dev);
dixFreePrivates(dev->devPrivates, PRIVATE_DEVICE);
free(dev);
}
@@ -2686,11 +2704,14 @@ AttachDevice(ClientPtr client, DeviceInt
dev->spriteInfo->paired = dev;
}
else {
+ DeviceIntPtr keyboard = GetMaster(dev, MASTER_KEYBOARD);
+
dev->spriteInfo->sprite = master->spriteInfo->sprite;
dev->spriteInfo->paired = master;
dev->spriteInfo->spriteOwner = FALSE;
- XkbPushLockedStateToSlaves(GetMaster(dev, MASTER_KEYBOARD), 0, 0);
+ if (keyboard)
+ XkbPushLockedStateToSlaves(keyboard, 0, 0);
RecalculateMasterButtons(master);
}
Index: xsrc/external/mit/xorg-server/dist/dix/dispatch.c
diff -u xsrc/external/mit/xorg-server/dist/dix/dispatch.c:1.7.2.1 xsrc/external/mit/xorg-server/dist/dix/dispatch.c:1.7.2.2
--- xsrc/external/mit/xorg-server/dist/dix/dispatch.c:1.7.2.1 Sat Nov 2 10:35:51 2024
+++ xsrc/external/mit/xorg-server/dist/dix/dispatch.c Thu Feb 27 10:16:45 2025
@@ -3107,6 +3107,10 @@ ProcFreeCursor(ClientPtr client)
rc = dixLookupResourceByType((void **) &pCursor, stuff->id, RT_CURSOR,
client, DixDestroyAccess);
if (rc == Success) {
+ if (pCursor == rootCursor) {
+ client->errorValue = stuff->id;
+ return BadCursor;
+ }
FreeResource(stuff->id, RT_NONE);
return Success;
}
Index: xsrc/external/mit/xorg-server/dist/dix/enterleave.c
diff -u xsrc/external/mit/xorg-server/dist/dix/enterleave.c:1.7.2.1 xsrc/external/mit/xorg-server/dist/dix/enterleave.c:1.7.2.2
--- xsrc/external/mit/xorg-server/dist/dix/enterleave.c:1.7.2.1 Sat Nov 2 10:35:51 2024
+++ xsrc/external/mit/xorg-server/dist/dix/enterleave.c Thu Feb 27 10:16:45 2025
@@ -738,7 +738,7 @@ DeliverStateNotifyEvent(DeviceIntPtr dev
(ev - 1)->deviceid |= MORE_EVENTS;
bev->type = DeviceButtonStateNotify;
bev->deviceid = dev->id;
- memcpy((char *) &bev->buttons[4], (char *) &b->down[4],
+ memcpy((char *) &bev->buttons[0], (char *) &b->down[4],
DOWN_LENGTH - 4);
}
Index: xsrc/external/mit/xorg-server/dist/dix/eventconvert.c
diff -u xsrc/external/mit/xorg-server/dist/dix/eventconvert.c:1.1.1.6.2.1 xsrc/external/mit/xorg-server/dist/dix/eventconvert.c:1.1.1.6.2.2
--- xsrc/external/mit/xorg-server/dist/dix/eventconvert.c:1.1.1.6.2.1 Sat Nov 2 10:35:51 2024
+++ xsrc/external/mit/xorg-server/dist/dix/eventconvert.c Thu Feb 27 10:16:45 2025
@@ -735,7 +735,7 @@ eventToDeviceEvent(DeviceEvent *ev, xEve
ptr += xde->buttons_len * 4;
axisval = (FP3232 *) (ptr + xde->valuators_len * 4);
- for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++) {
+ for (i = 0; i < MAX_VALUATORS; i++) {
if (BitIsOn(ev->valuators.mask, i)) {
SetBit(ptr, i);
*axisval = double_to_fp3232(ev->valuators.data[i]);
@@ -802,7 +802,7 @@ eventToRawEvent(RawDeviceEvent *ev, xEve
ptr = (char *) &raw[1];
axisval = (FP3232 *) (ptr + raw->valuators_len * 4);
axisval_raw = axisval + nvals;
- for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++) {
+ for (i = 0; i < MAX_VALUATORS; i++) {
if (BitIsOn(ev->valuators.mask, i)) {
SetBit(ptr, i);
*axisval = double_to_fp3232(ev->valuators.data[i]);
Index: xsrc/external/mit/xorg-server/dist/dix/main.c
diff -u xsrc/external/mit/xorg-server/dist/dix/main.c:1.1.1.8 xsrc/external/mit/xorg-server/dist/dix/main.c:1.1.1.8.2.1
--- xsrc/external/mit/xorg-server/dist/dix/main.c:1.1.1.8 Fri Jul 15 02:12:48 2022
+++ xsrc/external/mit/xorg-server/dist/dix/main.c Thu Feb 27 10:16:45 2025
@@ -231,6 +231,8 @@ dix_main(int argc, char *argv[], char *e
FatalError("could not open default cursor font");
}
+ rootCursor = RefCursor(rootCursor);
+
#ifdef PANORAMIX
/*
* Consolidate window and colourmap information for each screen
@@ -271,6 +273,8 @@ dix_main(int argc, char *argv[], char *e
Dispatch();
+ UnrefCursor(rootCursor);
+
UndisplayDevices();
DisableAllDevices();
Index: xsrc/external/mit/xorg-server/dist/glamor/glamor_program.c
diff -u xsrc/external/mit/xorg-server/dist/glamor/glamor_program.c:1.1.1.3 xsrc/external/mit/xorg-server/dist/glamor/glamor_program.c:1.1.1.3.2.1
--- xsrc/external/mit/xorg-server/dist/glamor/glamor_program.c:1.1.1.3 Fri Jul 15 02:12:47 2022
+++ xsrc/external/mit/xorg-server/dist/glamor/glamor_program.c Thu Feb 27 10:16:45 2025
@@ -340,8 +340,6 @@ glamor_build_program(ScreenPtr
vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, vs_prog_string);
fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, fs_prog_string);
- free(vs_prog_string);
- free(fs_prog_string);
glAttachShader(prog->prog, vs_prog);
glDeleteShader(vs_prog);
glAttachShader(prog->prog, fs_prog);
@@ -374,6 +372,8 @@ glamor_build_program(ScreenPtr
prog->atlas_uniform = glamor_get_uniform(prog, glamor_program_location_atlas, "atlas");
free(version_string);
+ free(vs_prog_string);
+ free(fs_prog_string);
free(fs_vars);
free(vs_vars);
return TRUE;
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86Configure.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86Configure.c:1.12 xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86Configure.c:1.12.2.1
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86Configure.c:1.12 Fri Jul 15 02:18:59 2022
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86Configure.c Thu Feb 27 10:16:46 2025
@@ -324,8 +324,10 @@ configureDeviceSection(int screennum)
len += strlen(opttype);
ptr->dev_comment = realloc(ptr->dev_comment, len);
- if (!ptr->dev_comment)
+ if (!ptr->dev_comment) {
+ free(optname);
break;
+ }
p_e = ptr->dev_comment + strlen(ptr->dev_comment);
sprintf(p_e, "%s%-20s%s%s%s", prefix, optname, middle,
opttype, suffix);
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86sbusBus.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86sbusBus.c:1.7 xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86sbusBus.c:1.7.6.1
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86sbusBus.c:1.7 Sat Aug 20 21:15:06 2016
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/common/xf86sbusBus.c Thu Feb 27 10:16:46 2025
@@ -244,7 +244,7 @@ xf86SbusProbe(void)
* in the correct format for a SBUS bus id.
*/
-Bool
+static Bool
xf86ParseSbusBusString(const char *busID, int *fbNum)
{
/*
@@ -316,7 +316,7 @@ xf86ParseSbusBusString(const char *busID
* Compare a BUS ID string with a SBUS bus id. Return TRUE if they match.
*/
-Bool
+static Bool
xf86CompareSbusBusString(const char *busID, int fbNum)
{
int iFbNum;
@@ -333,7 +333,7 @@ xf86CompareSbusBusString(const char *bus
* Check if the slot requested is free. If it is already in use, return FALSE.
*/
-Bool
+static Bool
xf86CheckSbusSlot(int fbNum)
{
int i;
@@ -354,7 +354,7 @@ xf86CheckSbusSlot(int fbNum)
* Otherwise, claim the slot for the screen requesting it.
*/
-int
+static int
xf86ClaimSbusSlot(sbusDevicePtr psdp, DriverPtr drvp, GDevPtr dev, Bool active)
{
EntityPtr p = NULL;
@@ -752,6 +752,7 @@ void
xf86SbusConfigureNewDev(void *busData, sbusDevicePtr sBus, GDevRec * GDev)
{
char *promPath = NULL;
+ char *tmp;
sBus = (sbusDevicePtr) busData;
GDev->identifier = sBus->descr;
@@ -760,10 +761,11 @@ xf86SbusConfigureNewDev(void *busData, s
sparcPromClose();
}
if (promPath) {
- XNFasprintf(&GDev->busID, "SBUS:%s", promPath);
+ XNFasprintf(&tmp, "SBUS:%s", promPath);
free(promPath);
}
else {
- XNFasprintf(&GDev->busID, "SBUS:fb%d", sBus->fbNum);
+ XNFasprintf(&tmp, "SBUS:fb%d", sBus->fbNum);
}
+ GDev->busID = tmp;
}
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/dri2/dri2.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/dri2/dri2.c:1.5 xsrc/external/mit/xorg-server/dist/hw/xfree86/dri2/dri2.c:1.5.2.1
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/dri2/dri2.c:1.5 Fri Jul 15 02:18:59 2022
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/dri2/dri2.c Thu Feb 27 10:16:46 2025
@@ -356,10 +356,15 @@ DRI2CreateDrawable2(ClientPtr client, Dr
XID *dri2_id_out)
{
DRI2DrawablePtr pPriv;
- DRI2ClientPtr dri2_client = dri2ClientPrivate(client);
+ DRI2ClientPtr dri2_client;
XID dri2_id;
int rc;
+ if (!dixPrivateKeyRegistered(dri2ScreenPrivateKey))
+ return BadValue;
+
+ dri2_client = dri2ClientPrivate(client);
+
pPriv = DRI2GetDrawable(pDraw);
if (pPriv == NULL)
pPriv = DRI2AllocateDrawable(pDraw);
@@ -1362,9 +1367,14 @@ Bool
DRI2Authenticate(ClientPtr client, ScreenPtr pScreen, uint32_t magic)
{
DRI2ScreenPtr ds;
- DRI2ClientPtr dri2_client = dri2ClientPrivate(client);
+ DRI2ClientPtr dri2_client;
ScreenPtr primescreen;
+ if (!dixPrivateKeyRegistered(dri2ScreenPrivateKey))
+ return FALSE;
+
+ dri2_client = dri2ClientPrivate(client);
+
ds = DRI2GetScreenPrime(pScreen, dri2_client->prime_id);
if (ds == NULL)
return FALSE;
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c:1.7 xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c:1.7.2.1
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c:1.7 Fri Jul 15 02:18:59 2022
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/driver.c Thu Feb 27 10:16:46 2025
@@ -515,9 +515,41 @@ GetRec(ScrnInfoPtr pScrn)
return TRUE;
}
+static void
+rotate_clip(PixmapPtr pixmap, BoxPtr rect, drmModeClip *clip, Rotation rotation)
+{
+ int w = pixmap->drawable.width;
+ int h = pixmap->drawable.height;
+
+ if (rotation == RR_Rotate_90) {
+ /* Rotate 90 degrees counter clockwise */
+ clip->x1 = rect->y1;
+ clip->x2 = rect->y2;
+ clip->y1 = w - rect->x2;
+ clip->y2 = w - rect->x1;
+ } else if (rotation == RR_Rotate_180) {
+ /* Rotate 180 degrees */
+ clip->x1 = w - rect->x2;
+ clip->x2 = w - rect->x1;
+ clip->y1 = h - rect->y2;
+ clip->y2 = h - rect->y1;
+ } else if (rotation == RR_Rotate_270) {
+ /* Rotate 90 degrees clockwise */
+ clip->x1 = h - rect->y2;
+ clip->x2 = h - rect->y1;
+ clip->y1 = rect->x1;
+ clip->y2 = rect->x2;
+ } else {
+ clip->x1 = rect->x1;
+ clip->x2 = rect->x2;
+ clip->y1 = rect->y1;
+ clip->y2 = rect->y2;
+ }
+}
+
static int
-dispatch_dirty_region(ScrnInfoPtr scrn,
- PixmapPtr pixmap, DamagePtr damage, int fb_id)
+dispatch_dirty_region(ScrnInfoPtr scrn, xf86CrtcPtr crtc,
+ PixmapPtr pixmap, DamagePtr damage, int fb_id)
{
modesettingPtr ms = modesettingPTR(scrn);
RegionPtr dirty = DamageRegion(damage);
@@ -532,13 +564,9 @@ dispatch_dirty_region(ScrnInfoPtr scrn,
if (!clip)
return -ENOMEM;
- /* XXX no need for copy? */
- for (i = 0; i < num_cliprects; i++, rect++) {
- clip[i].x1 = rect->x1;
- clip[i].y1 = rect->y1;
- clip[i].x2 = rect->x2;
- clip[i].y2 = rect->y2;
- }
+ /* Rotate and copy rects into clips */
+ for (i = 0; i < num_cliprects; i++, rect++)
+ rotate_clip(pixmap, rect, &clip[i], crtc->rotation);
/* TODO query connector property to see if this is needed */
ret = drmModeDirtyFB(ms->fd, fb_id, clip, num_cliprects);
@@ -561,20 +589,31 @@ static void
dispatch_dirty(ScreenPtr pScreen)
{
ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
modesettingPtr ms = modesettingPTR(scrn);
PixmapPtr pixmap = pScreen->GetScreenPixmap(pScreen);
- int fb_id = ms->drmmode.fb_id;
- int ret;
+ uint32_t fb_id;
+ int ret, c, x, y ;
- ret = dispatch_dirty_region(scrn, pixmap, ms->damage, fb_id);
- if (ret == -EINVAL || ret == -ENOSYS) {
- ms->dirty_enabled = FALSE;
- DamageUnregister(ms->damage);
- DamageDestroy(ms->damage);
- ms->damage = NULL;
- xf86DrvMsg(scrn->scrnIndex, X_INFO,
- "Disabling kernel dirty updates, not required.\n");
- return;
+ for (c = 0; c < xf86_config->num_crtc; c++) {
+ xf86CrtcPtr crtc = xf86_config->crtc[c];
+ drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
+
+ if (!drmmode_crtc)
+ continue;
+
+ drmmode_crtc_get_fb_id(crtc, &fb_id, &x, &y);
+
+ ret = dispatch_dirty_region(scrn, crtc, pixmap, ms->damage, fb_id);
+ if (ret == -EINVAL || ret == -ENOSYS) {
+ ms->dirty_enabled = FALSE;
+ DamageUnregister(ms->damage);
+ DamageDestroy(ms->damage);
+ ms->damage = NULL;
+ xf86DrvMsg(scrn->scrnIndex, X_INFO,
+ "Disabling kernel dirty updates, not required.\n");
+ return;
+ }
}
}
@@ -586,7 +625,7 @@ dispatch_dirty_pixmap(ScrnInfoPtr scrn,
DamagePtr damage = ppriv->secondary_damage;
int fb_id = ppriv->fb_id;
- dispatch_dirty_region(scrn, ppix, damage, fb_id);
+ dispatch_dirty_region(scrn, crtc, ppix, damage, fb_id);
}
static void
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c:1.11 xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c:1.11.2.1
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c:1.11 Fri Aug 12 08:18:29 2022
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.c Thu Feb 27 10:16:46 2025
@@ -627,7 +627,7 @@ drmmode_crtc_can_test_mode(xf86CrtcPtr c
return ms->atomic_modeset;
}
-static Bool
+Bool
drmmode_crtc_get_fb_id(xf86CrtcPtr crtc, uint32_t *fb_id, int *x, int *y)
{
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.h
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.h:1.1.1.4 xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.h:1.1.1.4.2.1
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.h:1.1.1.4 Fri Jul 15 02:12:52 2022
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/drmmode_display.h Thu Feb 27 10:16:46 2025
@@ -311,6 +311,8 @@ void drmmode_copy_fb(ScrnInfoPtr pScrn,
int drmmode_crtc_flip(xf86CrtcPtr crtc, uint32_t fb_id, uint32_t flags, void *data);
+Bool drmmode_crtc_get_fb_id(xf86CrtcPtr crtc, uint32_t *fb_id, int *x, int *y);
+
void drmmode_set_dpms(ScrnInfoPtr scrn, int PowerManagementMode, int flags);
void drmmode_crtc_set_vrr(xf86CrtcPtr crtc, Bool enabled);
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c:1.8 xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c:1.8.2.1
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c:1.8 Fri Jul 15 02:18:59 2022
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/drivers/modesetting/present.c Thu Feb 27 10:16:46 2025
@@ -391,22 +391,24 @@ ms_present_unflip(ScreenPtr screen, uint
PixmapPtr pixmap = screen->GetScreenPixmap(screen);
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
int i;
- struct ms_present_vblank_event *event;
ms_present_set_screen_vrr(scrn, FALSE);
- event = calloc(1, sizeof(struct ms_present_vblank_event));
- if (!event)
- return;
-
- event->event_id = event_id;
- event->unflip = TRUE;
-
- if (ms_present_check_unflip(NULL, screen->root, pixmap, TRUE, NULL) &&
- ms_do_pageflip(screen, pixmap, event, -1, FALSE,
- ms_present_flip_handler, ms_present_flip_abort,
- "Present-unflip")) {
- return;
+ if (ms_present_check_unflip(NULL, screen->root, pixmap, TRUE, NULL)) {
+ struct ms_present_vblank_event *event;
+
+ event = calloc(1, sizeof(struct ms_present_vblank_event));
+ if (!event)
+ return;
+
+ event->event_id = event_id;
+ event->unflip = TRUE;
+
+ if (ms_do_pageflip(screen, pixmap, event, -1, FALSE,
+ ms_present_flip_handler, ms_present_flip_abort,
+ "Present-unflip")) {
+ return;
+ }
}
for (i = 0; i < config->num_crtc; i++) {
Index: xsrc/external/mit/xorg-server/dist/hw/xfree86/fbdevhw/fbdevhw.c
diff -u xsrc/external/mit/xorg-server/dist/hw/xfree86/fbdevhw/fbdevhw.c:1.5 xsrc/external/mit/xorg-server/dist/hw/xfree86/fbdevhw/fbdevhw.c:1.5.2.1
--- xsrc/external/mit/xorg-server/dist/hw/xfree86/fbdevhw/fbdevhw.c:1.5 Fri Jul 15 02:18:59 2022
+++ xsrc/external/mit/xorg-server/dist/hw/xfree86/fbdevhw/fbdevhw.c Thu Feb 27 10:16:46 2025
@@ -335,9 +335,9 @@ fbdev_open(int scrnIndex, const char *de
char *sysfs_path = NULL;
char *node = strrchr(dev, '/') + 1;
- if (asprintf(&sysfs_path, "/sys/class/graphics/%s", node) < 0 ||
+ if (asprintf(&sysfs_path, "/sys/class/graphics/%s/device/subsystem", node) < 0 ||
readlink(sysfs_path, buf, sizeof(buf) - 1) < 0 ||
- strstr(buf, "devices/pci")) {
+ strstr(buf, "bus/pci")) {
free(sysfs_path);
close(fd);
return -1;
Index: xsrc/external/mit/xorg-server/dist/include/dix-config.h.in
diff -u xsrc/external/mit/xorg-server/dist/include/dix-config.h.in:1.8.2.1 xsrc/external/mit/xorg-server/dist/include/dix-config.h.in:1.8.2.2
--- xsrc/external/mit/xorg-server/dist/include/dix-config.h.in:1.8.2.1 Tue Dec 20 09:44:27 2022
+++ xsrc/external/mit/xorg-server/dist/include/dix-config.h.in Thu Feb 27 10:16:46 2025
@@ -173,6 +173,9 @@
/* Define to 1 if you have the `shmctl64' function. */
#undef HAVE_SHMCTL64
+/* Define to 1 if the system has the type 'socklen_t'. */
+#undef HAVE_SOCKLEN_T
+
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
Index: xsrc/external/mit/xorg-server/dist/include/do-not-use-config.h.in
diff -u xsrc/external/mit/xorg-server/dist/include/do-not-use-config.h.in:1.1.1.13.2.3 xsrc/external/mit/xorg-server/dist/include/do-not-use-config.h.in:1.1.1.13.2.4
--- xsrc/external/mit/xorg-server/dist/include/do-not-use-config.h.in:1.1.1.13.2.3 Sat Nov 2 10:35:54 2024
+++ xsrc/external/mit/xorg-server/dist/include/do-not-use-config.h.in Thu Feb 27 10:16:46 2025
@@ -302,7 +302,7 @@
/* Use libmd SHA1 functions */
#undef HAVE_SHA1_IN_LIBMD
-/* Use libnettle SHA1 functions */
+/* Use static libnettle SHA1 functions */
#undef HAVE_SHA1_IN_LIBNETTLE
/* Use libsha1 for SHA1 */
Index: xsrc/external/mit/xorg-server/dist/include/meson.build
diff -u xsrc/external/mit/xorg-server/dist/include/meson.build:1.1.1.4.2.2 xsrc/external/mit/xorg-server/dist/include/meson.build:1.1.1.4.2.3
--- xsrc/external/mit/xorg-server/dist/include/meson.build:1.1.1.4.2.2 Wed Feb 8 17:09:44 2023
+++ xsrc/external/mit/xorg-server/dist/include/meson.build Thu Feb 27 10:16:46 2025
@@ -166,6 +166,8 @@ conf_data.set('HAVE_SETITIMER', cc.has_f
conf_data.set('HAVE_SHMCTL64', cc.has_function('shmctl64') ? '1' : false)
conf_data.set('HAVE_SIGACTION', cc.has_function('sigaction') ? '1' : false)
conf_data.set('HAVE_SIGPROCMASK', cc.has_function('sigprocmask') ? '1' : false)
+# HAVE_SOCKLEN_T is used by xtrans when IPv6 is disabled
+conf_data.set('HAVE_SOCKLEN_T', cc.has_type('socklen_t', prefix: '#include <sys/socket.h>') ? '1' : false)
conf_data.set('HAVE_STRCASECMP', cc.has_function('strcasecmp') ? '1' : false)
conf_data.set('HAVE_STRCASESTR', cc.has_function('strcasestr') ? '1' : false)
conf_data.set('HAVE_STRLCAT', cc.has_function('strlcat', dependencies: libbsd_dep) ? '1' : false)
Index: xsrc/external/mit/xorg-server/dist/os/WaitFor.c
diff -u xsrc/external/mit/xorg-server/dist/os/WaitFor.c:1.5 xsrc/external/mit/xorg-server/dist/os/WaitFor.c:1.5.2.1
--- xsrc/external/mit/xorg-server/dist/os/WaitFor.c:1.5 Fri Jul 15 02:19:01 2022
+++ xsrc/external/mit/xorg-server/dist/os/WaitFor.c Thu Feb 27 10:16:46 2025
@@ -420,13 +420,13 @@ NextDPMSTimeout(INT32 timeout)
switch (DPMSPowerLevel) {
case DPMSModeOn:
DPMS_CHECK_TIMEOUT(DPMSStandbyTime)
-
+ /* fallthrough */
case DPMSModeStandby:
DPMS_CHECK_TIMEOUT(DPMSSuspendTime)
-
+ /* fallthrough */
case DPMSModeSuspend:
DPMS_CHECK_TIMEOUT(DPMSOffTime)
-
+ /* fallthrough */
default: /* DPMSModeOff */
return 0;
}
Index: xsrc/external/mit/xorg-server/dist/os/access.c
diff -u xsrc/external/mit/xorg-server/dist/os/access.c:1.6.2.1 xsrc/external/mit/xorg-server/dist/os/access.c:1.6.2.2
--- xsrc/external/mit/xorg-server/dist/os/access.c:1.6.2.1 Wed Feb 8 17:09:46 2023
+++ xsrc/external/mit/xorg-server/dist/os/access.c Thu Feb 27 10:16:46 2025
@@ -1425,13 +1425,15 @@ RemoveHost(ClientPtr client, int family,
case FamilyChaos:
case FamilyServerInterpreted:
if ((len = CheckAddr(family, pAddr, length)) < 0) {
- client->errorValue = length;
+ if (client)
+ client->errorValue = length;
return BadValue;
}
break;
case FamilyLocal:
default:
- client->errorValue = family;
+ if (client)
+ client->errorValue = family;
return BadValue;
}
for (prev = &validhosts;
@@ -1860,7 +1862,7 @@ siHostnameAddrMatch(int family, void *ad
char hostname[SI_HOSTNAME_MAXLEN];
int f, hostaddrlen;
void *hostaddr;
- const char **addrlist;
+ char **addrlist;
if (siAddrLen >= sizeof(hostname))
return FALSE;
@@ -1885,7 +1887,9 @@ siHostnameAddrMatch(int family, void *ad
if ((f == family) && (len == hostaddrlen) &&
(memcmp(addr, hostaddr, len) == 0)) {
res = TRUE;
+#ifdef h_addr
break;
+#endif
}
}
}
Index: xsrc/external/mit/xorg-server/dist/os/connection.c
diff -u xsrc/external/mit/xorg-server/dist/os/connection.c:1.7.2.1 xsrc/external/mit/xorg-server/dist/os/connection.c:1.7.2.2
--- xsrc/external/mit/xorg-server/dist/os/connection.c:1.7.2.1 Wed Feb 8 17:09:46 2023
+++ xsrc/external/mit/xorg-server/dist/os/connection.c Thu Feb 27 10:16:46 2025
@@ -244,7 +244,7 @@ void
CreateWellKnownSockets(void)
{
int i;
- int partial;
+ int partial = 0;
/* display is initialized to "0" by main(). It is then set to the display
* number if specified on the command line. */
Index: xsrc/external/mit/xorg-server/dist/render/picture.c
diff -u xsrc/external/mit/xorg-server/dist/render/picture.c:1.1.1.9 xsrc/external/mit/xorg-server/dist/render/picture.c:1.1.1.9.2.1
--- xsrc/external/mit/xorg-server/dist/render/picture.c:1.1.1.9 Fri Jul 15 09:08:58 2022
+++ xsrc/external/mit/xorg-server/dist/render/picture.c Thu Feb 27 10:16:47 2025
@@ -427,6 +427,9 @@ PictureInitIndexedFormat(ScreenPtr pScre
else {
VisualPtr pVisual = PictureFindVisual(pScreen, format->index.vid);
+ if (pVisual == NULL)
+ return FALSE;
+
if (CreateColormap(FakeClientID(0), pScreen, pVisual,
&format->index.pColormap, AllocNone, 0)
!= Success)
Index: xsrc/external/mit/xorg-server/dist/test/sync/sync.c
diff -u xsrc/external/mit/xorg-server/dist/test/sync/sync.c:1.1.1.1 xsrc/external/mit/xorg-server/dist/test/sync/sync.c:1.1.1.1.4.1
--- xsrc/external/mit/xorg-server/dist/test/sync/sync.c:1.1.1.1 Mon Dec 31 09:36:08 2018
+++ xsrc/external/mit/xorg-server/dist/test/sync/sync.c Thu Feb 27 10:16:47 2025
@@ -260,9 +260,13 @@ test_change_alarm_delta(xcb_connection_t
xcb_sync_create_alarm(c, alarm, 0, NULL);
for (int i = 0; i < ARRAY_SIZE(some_values); i++) {
- uint32_t values[] = { some_values[i] >> 32, some_values[i] };
+ uint32_t mask = XCB_SYNC_CA_TEST_TYPE | XCB_SYNC_CA_DELTA;
+ uint32_t test_type = (some_values[i] >= 0 ?
+ XCB_SYNC_TESTTYPE_POSITIVE_COMPARISON :
+ XCB_SYNC_TESTTYPE_NEGATIVE_COMPARISON);
+ uint32_t values[] = { test_type, some_values[i] >> 32, some_values[i] };
- xcb_sync_change_alarm(c, alarm, XCB_SYNC_CA_DELTA, values);
+ xcb_sync_change_alarm(c, alarm, mask, values);
queries[i] = xcb_sync_query_alarm_unchecked(c, alarm);
}
Index: xsrc/external/mit/xorg-server/dist/xkb/XKBMAlloc.c
diff -u xsrc/external/mit/xorg-server/dist/xkb/XKBMAlloc.c:1.1.1.6 xsrc/external/mit/xorg-server/dist/xkb/XKBMAlloc.c:1.1.1.6.4.1
--- xsrc/external/mit/xorg-server/dist/xkb/XKBMAlloc.c:1.1.1.6 Mon Dec 31 09:36:08 2018
+++ xsrc/external/mit/xorg-server/dist/xkb/XKBMAlloc.c Thu Feb 27 10:16:47 2025
@@ -42,7 +42,6 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
Status
XkbAllocClientMap(XkbDescPtr xkb, unsigned which, unsigned nTotalTypes)
{
- register int i;
XkbClientMapPtr map;
if ((xkb == NULL) ||
@@ -104,8 +103,7 @@ XkbAllocClientMap(XkbDescPtr xkb, unsign
map->syms[0] = NoSymbol;
}
if (map->key_sym_map == NULL) {
- i = xkb->max_key_code + 1;
- map->key_sym_map = calloc(i, sizeof(XkbSymMapRec));
+ map->key_sym_map = calloc(MAP_LENGTH, sizeof(XkbSymMapRec));
if (map->key_sym_map == NULL)
return BadAlloc;
}
@@ -116,8 +114,7 @@ XkbAllocClientMap(XkbDescPtr xkb, unsign
(xkb->max_key_code < xkb->min_key_code))
return BadMatch;
if (map->modmap == NULL) {
- i = xkb->max_key_code + 1;
- map->modmap = calloc(i, sizeof(unsigned char));
+ map->modmap = calloc(MAP_LENGTH, sizeof(unsigned char));
if (map->modmap == NULL)
return BadAlloc;
}
@@ -150,8 +147,7 @@ XkbAllocServerMap(XkbDescPtr xkb, unsign
(xkb->max_key_code < xkb->min_key_code))
return BadMatch;
if (map->explicit == NULL) {
- i = xkb->max_key_code + 1;
- map->explicit = calloc(i, sizeof(unsigned char));
+ map->explicit = calloc(MAP_LENGTH, sizeof(unsigned char));
if (map->explicit == NULL)
return BadAlloc;
}
@@ -186,8 +182,7 @@ XkbAllocServerMap(XkbDescPtr xkb, unsign
((map->size_acts - map->num_acts) * sizeof(XkbAction)));
}
if (map->key_acts == NULL) {
- i = xkb->max_key_code + 1;
- map->key_acts = calloc(i, sizeof(unsigned short));
+ map->key_acts = calloc(MAP_LENGTH, sizeof(unsigned short));
if (map->key_acts == NULL)
return BadAlloc;
}
@@ -198,8 +193,7 @@ XkbAllocServerMap(XkbDescPtr xkb, unsign
(xkb->max_key_code < xkb->min_key_code))
return BadMatch;
if (map->behaviors == NULL) {
- i = xkb->max_key_code + 1;
- map->behaviors = calloc(i, sizeof(XkbBehavior));
+ map->behaviors = calloc(MAP_LENGTH, sizeof(XkbBehavior));
if (map->behaviors == NULL)
return BadAlloc;
}
@@ -210,8 +204,7 @@ XkbAllocServerMap(XkbDescPtr xkb, unsign
(xkb->max_key_code < xkb->min_key_code))
return BadMatch;
if (map->vmodmap == NULL) {
- i = xkb->max_key_code + 1;
- map->vmodmap = calloc(i, sizeof(unsigned short));
+ map->vmodmap = calloc(MAP_LENGTH, sizeof(unsigned short));
if (map->vmodmap == NULL)
return BadAlloc;
}
@@ -652,18 +645,9 @@ XkbChangeKeycodeRange(XkbDescPtr xkb,
if (maxKC > xkb->max_key_code) {
if (changes)
changes->map.max_key_code = maxKC;
- tmp = maxKC - xkb->max_key_code;
+ tmp = MAP_LENGTH - xkb->max_key_code;
if (xkb->map) {
if (xkb->map->key_sym_map) {
- XkbSymMapRec *prev_key_sym_map = xkb->map->key_sym_map;
-
- xkb->map->key_sym_map = reallocarray(xkb->map->key_sym_map,
- maxKC + 1,
- sizeof(XkbSymMapRec));
- if (!xkb->map->key_sym_map) {
- free(prev_key_sym_map);
- return BadAlloc;
- }
memset((char *) &xkb->map->key_sym_map[xkb->max_key_code], 0,
tmp * sizeof(XkbSymMapRec));
if (changes) {
@@ -676,15 +660,6 @@ XkbChangeKeycodeRange(XkbDescPtr xkb,
}
}
if (xkb->map->modmap) {
- unsigned char *prev_modmap = xkb->map->modmap;
-
- xkb->map->modmap = reallocarray(xkb->map->modmap,
- maxKC + 1,
- sizeof(unsigned char));
- if (!xkb->map->modmap) {
- free(prev_modmap);
- return BadAlloc;
- }
memset((char *) &xkb->map->modmap[xkb->max_key_code], 0, tmp);
if (changes) {
changes->map.changed = _ExtendRange(changes->map.changed,
@@ -699,15 +674,6 @@ XkbChangeKeycodeRange(XkbDescPtr xkb,
}
if (xkb->server) {
if (xkb->server->behaviors) {
- XkbBehavior *prev_behaviors = xkb->server->behaviors;
-
- xkb->server->behaviors = reallocarray(xkb->server->behaviors,
- maxKC + 1,
- sizeof(XkbBehavior));
- if (!xkb->server->behaviors) {
- free(prev_behaviors);
- return BadAlloc;
- }
memset((char *) &xkb->server->behaviors[xkb->max_key_code], 0,
tmp * sizeof(XkbBehavior));
if (changes) {
@@ -721,15 +687,6 @@ XkbChangeKeycodeRange(XkbDescPtr xkb,
}
}
if (xkb->server->key_acts) {
- unsigned short *prev_key_acts = xkb->server->key_acts;
-
- xkb->server->key_acts = reallocarray(xkb->server->key_acts,
- maxKC + 1,
- sizeof(unsigned short));
- if (!xkb->server->key_acts) {
- free(prev_key_acts);
- return BadAlloc;
- }
memset((char *) &xkb->server->key_acts[xkb->max_key_code], 0,
tmp * sizeof(unsigned short));
if (changes) {
@@ -743,15 +700,6 @@ XkbChangeKeycodeRange(XkbDescPtr xkb,
}
}
if (xkb->server->vmodmap) {
- unsigned short *prev_vmodmap = xkb->server->vmodmap;
-
- xkb->server->vmodmap = reallocarray(xkb->server->vmodmap,
- maxKC + 1,
- sizeof(unsigned short));
- if (!xkb->server->vmodmap) {
- free(prev_vmodmap);
- return BadAlloc;
- }
memset((char *) &xkb->server->vmodmap[xkb->max_key_code], 0,
tmp * sizeof(unsigned short));
if (changes) {
@@ -766,14 +714,6 @@ XkbChangeKeycodeRange(XkbDescPtr xkb,
}
}
if ((xkb->names) && (xkb->names->keys)) {
- XkbKeyNameRec *prev_keys = xkb->names->keys;
-
- xkb->names->keys = reallocarray(xkb->names->keys,
- maxKC + 1, sizeof(XkbKeyNameRec));
- if (!xkb->names->keys) {
- free(prev_keys);
- return BadAlloc;
- }
memset((char *) &xkb->names->keys[xkb->max_key_code], 0,
tmp * sizeof(XkbKeyNameRec));
if (changes) {
Index: xsrc/external/mit/xorg-server/dist/xkb/XKBMisc.c
diff -u xsrc/external/mit/xorg-server/dist/xkb/XKBMisc.c:1.1.1.7 xsrc/external/mit/xorg-server/dist/xkb/XKBMisc.c:1.1.1.7.2.1
--- xsrc/external/mit/xorg-server/dist/xkb/XKBMisc.c:1.1.1.7 Fri Jul 15 02:12:45 2022
+++ xsrc/external/mit/xorg-server/dist/xkb/XKBMisc.c Thu Feb 27 10:16:47 2025
@@ -553,6 +553,7 @@ XkbChangeTypesOfKey(XkbDescPtr xkb,
i = XkbSetNumGroups(i, 0);
xkb->map->key_sym_map[key].group_info = i;
XkbResizeKeySyms(xkb, key, 0);
+ XkbResizeKeyActions(xkb, key, 0);
return Success;
}
Index: xsrc/external/mit/xorg-server/dist/xkb/xkb.c
diff -u xsrc/external/mit/xorg-server/dist/xkb/xkb.c:1.8.2.2 xsrc/external/mit/xorg-server/dist/xkb/xkb.c:1.8.2.3
--- xsrc/external/mit/xorg-server/dist/xkb/xkb.c:1.8.2.2 Sat Nov 2 10:35:55 2024
+++ xsrc/external/mit/xorg-server/dist/xkb/xkb.c Thu Feb 27 10:16:47 2025
@@ -1093,10 +1093,10 @@ XkbSizeKeySyms(XkbDescPtr xkb, xkbGetMap
len = rep->nKeySyms * SIZEOF(xkbSymMapWireDesc);
symMap = &xkb->map->key_sym_map[rep->firstKeySym];
for (i = nSyms = 0; i < rep->nKeySyms; i++, symMap++) {
- if (symMap->offset != 0) {
- nSymsThisKey = XkbNumGroups(symMap->group_info) * symMap->width;
- nSyms += nSymsThisKey;
- }
+ nSymsThisKey = XkbNumGroups(symMap->group_info) * symMap->width;
+ if (nSymsThisKey == 0)
+ continue;
+ nSyms += nSymsThisKey;
}
len += nSyms * 4;
rep->totalSyms = nSyms;
Index: xsrc/external/mit/xorg-server/dist/xkb/xkbUtils.c
diff -u xsrc/external/mit/xorg-server/dist/xkb/xkbUtils.c:1.1.1.6.4.2 xsrc/external/mit/xorg-server/dist/xkb/xkbUtils.c:1.1.1.6.4.3
--- xsrc/external/mit/xorg-server/dist/xkb/xkbUtils.c:1.1.1.6.4.2 Sat Apr 1 15:21:51 2023
+++ xsrc/external/mit/xorg-server/dist/xkb/xkbUtils.c Thu Feb 27 10:16:47 2025
@@ -933,6 +933,7 @@ _XkbCopyClientMap(XkbDescPtr src, XkbDes
{
void *tmp = NULL;
int i;
+ int gap;
XkbKeyTypePtr stype = NULL, dtype = NULL;
/* client map */
@@ -962,15 +963,20 @@ _XkbCopyClientMap(XkbDescPtr src, XkbDes
}
dst->map->num_syms = src->map->num_syms;
dst->map->size_syms = src->map->size_syms;
+ gap = MAP_LENGTH - (src->max_key_code + 1);
if (src->map->key_sym_map) {
- if (src->max_key_code != dst->max_key_code) {
+ if (!dst->map->key_sym_map) {
tmp = reallocarray(dst->map->key_sym_map,
- src->max_key_code + 1, sizeof(XkbSymMapRec));
+ MAP_LENGTH, sizeof(XkbSymMapRec));
if (!tmp)
return FALSE;
dst->map->key_sym_map = tmp;
}
+ if (gap > 0) {
+ memset((char *) &dst->map->key_sym_map[gap], 0,
+ gap * sizeof(XkbSymMapRec));
+ }
memcpy(dst->map->key_sym_map, src->map->key_sym_map,
(src->max_key_code + 1) * sizeof(XkbSymMapRec));
}
@@ -1141,12 +1147,15 @@ _XkbCopyClientMap(XkbDescPtr src, XkbDes
}
if (src->map->modmap) {
- if (src->max_key_code != dst->max_key_code) {
- tmp = realloc(dst->map->modmap, src->max_key_code + 1);
+ if (!dst->map->modmap) {
+ tmp = realloc(dst->map->modmap, MAP_LENGTH);
if (!tmp)
return FALSE;
dst->map->modmap = tmp;
}
+ if (gap > 0) {
+ memset(dst->map->modmap + gap, 0, gap);
+ }
memcpy(dst->map->modmap, src->map->modmap, src->max_key_code + 1);
}
else {
@@ -1166,6 +1175,7 @@ static Bool
_XkbCopyServerMap(XkbDescPtr src, XkbDescPtr dst)
{
void *tmp = NULL;
+ int gap;
/* server map */
if (src->server) {
@@ -1176,13 +1186,16 @@ _XkbCopyServerMap(XkbDescPtr src, XkbDes
dst->server = tmp;
}
+ gap = MAP_LENGTH - (src->max_key_code + 1);
if (src->server->explicit) {
- if (src->max_key_code != dst->max_key_code) {
- tmp = realloc(dst->server->explicit, src->max_key_code + 1);
+ if (!dst->server->explicit) {
+ tmp = realloc(dst->server->explicit, MAP_LENGTH);
if (!tmp)
return FALSE;
dst->server->explicit = tmp;
}
+ if (gap > 0)
+ memset(dst->server->explicit + gap, 0, gap);
memcpy(dst->server->explicit, src->server->explicit,
src->max_key_code + 1);
}
@@ -1210,13 +1223,15 @@ _XkbCopyServerMap(XkbDescPtr src, XkbDes
dst->server->num_acts = src->server->num_acts;
if (src->server->key_acts) {
- if (src->max_key_code != dst->max_key_code) {
+ if (!dst->server->key_acts) {
tmp = reallocarray(dst->server->key_acts,
- src->max_key_code + 1, sizeof(unsigned short));
+ MAP_LENGTH, sizeof(unsigned short));
if (!tmp)
return FALSE;
dst->server->key_acts = tmp;
}
+ if (gap > 0)
+ memset((char *) &dst->server->key_acts[gap], 0, gap * sizeof(unsigned short));
memcpy(dst->server->key_acts, src->server->key_acts,
(src->max_key_code + 1) * sizeof(unsigned short));
}
@@ -1226,13 +1241,15 @@ _XkbCopyServerMap(XkbDescPtr src, XkbDes
}
if (src->server->behaviors) {
- if (src->max_key_code != dst->max_key_code) {
+ if (!dst->server->behaviors) {
tmp = reallocarray(dst->server->behaviors,
- src->max_key_code + 1, sizeof(XkbBehavior));
+ MAP_LENGTH, sizeof(XkbBehavior));
if (!tmp)
return FALSE;
dst->server->behaviors = tmp;
}
+ if (gap > 0)
+ memset((char *) &dst->server->behaviors[gap], 0, gap * sizeof(XkbBehavior));
memcpy(dst->server->behaviors, src->server->behaviors,
(src->max_key_code + 1) * sizeof(XkbBehavior));
}
@@ -1244,13 +1261,15 @@ _XkbCopyServerMap(XkbDescPtr src, XkbDes
memcpy(dst->server->vmods, src->server->vmods, XkbNumVirtualMods);
if (src->server->vmodmap) {
- if (src->max_key_code != dst->max_key_code) {
+ if (!dst->server->vmodmap) {
tmp = reallocarray(dst->server->vmodmap,
- src->max_key_code + 1, sizeof(unsigned short));
+ MAP_LENGTH, sizeof(unsigned short));
if (!tmp)
return FALSE;
dst->server->vmodmap = tmp;
}
+ if (gap > 0)
+ memset((char *) &dst->server->vmodmap[gap], 0, gap * sizeof(unsigned short));
memcpy(dst->server->vmodmap, src->server->vmodmap,
(src->max_key_code + 1) * sizeof(unsigned short));
}
@@ -1271,6 +1290,7 @@ static Bool
_XkbCopyNames(XkbDescPtr src, XkbDescPtr dst)
{
void *tmp = NULL;
+ int gap;
/* names */
if (src->names) {
@@ -1280,14 +1300,17 @@ _XkbCopyNames(XkbDescPtr src, XkbDescPtr
return FALSE;
}
+ gap = MAP_LENGTH - (src->max_key_code + 1);
if (src->names->keys) {
- if (src->max_key_code != dst->max_key_code) {
- tmp = reallocarray(dst->names->keys, src->max_key_code + 1,
+ if (!dst->names->keys) {
+ tmp = reallocarray(dst->names->keys, MAP_LENGTH,
sizeof(XkbKeyNameRec));
if (!tmp)
return FALSE;
dst->names->keys = tmp;
}
+ if (gap > 0)
+ memset((char *) &dst->names->keys[gap], 0, gap * sizeof(XkbKeyNameRec));
memcpy(dst->names->keys, src->names->keys,
(src->max_key_code + 1) * sizeof(XkbKeyNameRec));
}
Index: xsrc/external/mit/xorg-server/dist/xkb/xkbtext.c
diff -u xsrc/external/mit/xorg-server/dist/xkb/xkbtext.c:1.1.1.6 xsrc/external/mit/xorg-server/dist/xkb/xkbtext.c:1.1.1.6.2.1
--- xsrc/external/mit/xorg-server/dist/xkb/xkbtext.c:1.1.1.6 Fri Jul 15 02:12:45 2022
+++ xsrc/external/mit/xorg-server/dist/xkb/xkbtext.c Thu Feb 27 10:16:47 2025
@@ -175,14 +175,14 @@ XkbVModMaskText(XkbDescPtr xkb,
len = strlen(tmp) + 1 + (str == buf ? 0 : 1);
if (format == XkbCFile)
len += 4;
- if ((str - (buf + len)) <= VMOD_BUFFER_SIZE) {
- if (str != buf) {
- if (format == XkbCFile)
- *str++ = '|';
- else
- *str++ = '+';
- len--;
- }
+ if ((str - buf) + len > VMOD_BUFFER_SIZE)
+ continue; /* Skip */
+ if (str != buf) {
+ if (format == XkbCFile)
+ *str++ = '|';
+ else
+ *str++ = '+';
+ len--;
}
if (format == XkbCFile)
sprintf(str, "%sMask", tmp);
Index: xsrc/external/mit/xorg-server/include/dix-config.h
diff -u xsrc/external/mit/xorg-server/include/dix-config.h:1.46.2.5 xsrc/external/mit/xorg-server/include/dix-config.h:1.46.2.6
--- xsrc/external/mit/xorg-server/include/dix-config.h:1.46.2.5 Sat Nov 2 10:35:55 2024
+++ xsrc/external/mit/xorg-server/include/dix-config.h Thu Feb 27 10:16:47 2025
@@ -171,6 +171,9 @@
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
+/* Define to 1 if the system has the type 'socklen_t'. */
+#define HAVE_SOCKLEN_T 1
+
/* Define to 1 if you have the `strcasecmp' function. */
#define HAVE_STRCASECMP 1
@@ -343,7 +346,7 @@
#define XINERAMA 1
/* Current Xorg version */
-#define XORG_VERSION_CURRENT ((10000000) + ((21) * 100000) + ((1) * 1000) + 14)
+#define XORG_VERSION_CURRENT ((10000000) + ((21) * 100000) + ((1) * 1000) + 16)
/* Build Xv Extension */
#define XvExtension 1
Index: xsrc/external/mit/xorg-server/include/version-config.h
diff -u xsrc/external/mit/xorg-server/include/version-config.h:1.16.2.5 xsrc/external/mit/xorg-server/include/version-config.h:1.16.2.6
--- xsrc/external/mit/xorg-server/include/version-config.h:1.16.2.5 Sat Nov 2 10:35:55 2024
+++ xsrc/external/mit/xorg-server/include/version-config.h Thu Feb 27 10:16:47 2025
@@ -5,13 +5,13 @@
#define VERSION_CONFIG_H
/* Vendor man version */
-#define VENDOR_MAN_VERSION "Version 21.1.14"
+#define VENDOR_MAN_VERSION "Version 21.1.16"
/* Vendor name */
#define VENDOR_NAME "The X.Org Foundation"
/* Vendor release */
-#define VENDOR_RELEASE ((10000000) + ((21) * 100000) + ((1) * 1000) + 14)
+#define VENDOR_RELEASE ((10000000) + ((21) * 100000) + ((1) * 1000) + 16)
#endif /* VERSION_CONFIG_H */
Index: xsrc/external/mit/xorg-server/include/xorg-config.h
diff -u xsrc/external/mit/xorg-server/include/xorg-config.h:1.26.2.5 xsrc/external/mit/xorg-server/include/xorg-config.h:1.26.2.6
--- xsrc/external/mit/xorg-server/include/xorg-config.h:1.26.2.5 Sat Nov 2 10:35:56 2024
+++ xsrc/external/mit/xorg-server/include/xorg-config.h Thu Feb 27 10:16:47 2025
@@ -17,7 +17,7 @@
#define XORGSERVER 1
/* Current X.Org version. */
-#define XORG_VERSION_CURRENT ((10000000) + ((21) * 100000) + ((1) * 1000) + 14)
+#define XORG_VERSION_CURRENT ((10000000) + ((21) * 100000) + ((1) * 1000) + 16)
/* Name of X server. */
#define __XSERVERNAME__ "Xorg"
Index: xsrc/external/mit/xorg-server/include/xorg-server.h
diff -u xsrc/external/mit/xorg-server/include/xorg-server.h:1.26.2.5 xsrc/external/mit/xorg-server/include/xorg-server.h:1.26.2.6
--- xsrc/external/mit/xorg-server/include/xorg-server.h:1.26.2.5 Sat Nov 2 10:35:56 2024
+++ xsrc/external/mit/xorg-server/include/xorg-server.h Thu Feb 27 10:16:47 2025
@@ -140,7 +140,7 @@
#define XORGSERVER 1
/* Current Xorg version */
-#define XORG_VERSION_CURRENT ((10000000) + ((21) * 100000) + ((1) * 1000) + 14)
+#define XORG_VERSION_CURRENT ((10000000) + ((21) * 100000) + ((1) * 1000) + 16)
/* Build Xv Extension */
#define XvExtension 1