Commit Graph

20956 Commits

Author SHA1 Message Date
Olivier Fourdan
e2cd802a73 present: Fix use-after-free in present_create_notifies()
Using the Present extension, if an error occurs while processing and
adding the notifications after presenting a pixmap, the function
present_create_notifies() will clean up and remove the notifications
it added.

However, there are two different code paths that can lead to an error
creating the notify, one being before the notify is being added to the
list, and another one after the notify is added.

When the error occurs before it's been added, it removes the elements up
to the last added element, instead of the actual number of elements
which were added.

As a result, in case of error, as with an invalid window for example, it
leaves a dangling pointer to the last element, leading to a use after
free case later:

 |  Invalid write of size 8
 |     at 0x5361D5: present_clear_window_notifies (present_notify.c:42)
 |     by 0x534A56: present_destroy_window (present_screen.c:107)
 |     by 0x41E441: xwl_destroy_window (xwayland-window.c:1959)
 |     by 0x4F9EC9: compDestroyWindow (compwindow.c:622)
 |     by 0x51EAC4: damageDestroyWindow (damage.c:1592)
 |     by 0x4FDC29: DbeDestroyWindow (dbe.c:1291)
 |     by 0x4EAC55: FreeWindowResources (window.c:1023)
 |     by 0x4EAF59: DeleteWindow (window.c:1091)
 |     by 0x4DE59A: doFreeResource (resource.c:890)
 |     by 0x4DEFB2: FreeClientResources (resource.c:1156)
 |     by 0x4A9AFB: CloseDownClient (dispatch.c:3567)
 |     by 0x5DCC78: ClientReady (connection.c:603)
 |   Address 0x16126200 is 16 bytes inside a block of size 2,048 free'd
 |     at 0x4841E43: free (vg_replace_malloc.c:989)
 |     by 0x5363DD: present_destroy_notifies (present_notify.c:111)
 |     by 0x53638D: present_create_notifies (present_notify.c:100)
 |     by 0x5368E9: proc_present_pixmap_common (present_request.c:164)
 |     by 0x536A7D: proc_present_pixmap (present_request.c:189)
 |     by 0x536FA9: proc_present_dispatch (present_request.c:337)
 |     by 0x4A1E4E: Dispatch (dispatch.c:561)
 |     by 0x4B00F1: dix_main (main.c:284)
 |     by 0x42879D: main (stubmain.c:34)
 |   Block was alloc'd at
 |     at 0x48463F3: calloc (vg_replace_malloc.c:1675)
 |     by 0x5362A1: present_create_notifies (present_notify.c:81)
 |     by 0x5368E9: proc_present_pixmap_common (present_request.c:164)
 |     by 0x536A7D: proc_present_pixmap (present_request.c:189)
 |     by 0x536FA9: proc_present_dispatch (present_request.c:337)
 |     by 0x4A1E4E: Dispatch (dispatch.c:561)
 |     by 0x4B00F1: dix_main (main.c:284)
 |     by 0x42879D: main (stubmain.c:34)

To fix the issue, count and remove the actual number of notify elements
added in case of error.

CVE-2025-62229, ZDI-CAN-27238

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

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2086>
2025-10-30 13:11:35 +01:00
Tautvis
c329f4e91c dix: dixFreeScreen call hookPostCreateResources too
Call DeleteCallbackList(&pScreen->hookPostCreateResources) during
dixFreeScreen, because otherwise it will be heap-use-after-free during
DeleteCallbackManager call.

Signed-off-by: Tautvis <gtautvis@gmail.com>
2025-10-29 16:28:33 +01:00
Enrico Weigelt, metux IT consult
e422cfc73c hotfix release xlibre-xserver-25.0.0.13
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
xlibre-xserver-25.0.0.13
2025-10-28 19:55:50 +01:00
Alan Coopersmith
edd022b5ec xfree86: add missing headers to build sun_init.c on Solaris/SPARC
Fixes: 0f715b4 ("xfree86: os-support: move hidden Solaris-specific symbols out of public header")
Fixes: e2fa0d2 ("fix including <sys/mman.h>")

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2070>

Further explanation about this commit by @alanc:

This particular set of `#ifdefs` matches the ones around the code using the fbio ioctls and mmap calls in the `xf86CloseConsole()` code later in the file:
c62cd2feaa/hw/xfree86/os-support/solaris/sun_init.c (L281)
reflecting the lack of /dev/fb style drivers on x86 systems on Solaris.
2025-10-21 13:52:48 +02:00
Alan Coopersmith
73fbf6b645 xfree86: Fix -Wdiscarded-qualifiers warnings in SPARC Sbus probe code
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2070>
2025-10-21 13:52:48 +02:00
Alan Coopersmith
68cb3407d5 xfree86: fix meson build on 64-bit Solaris/SPARC systems
For cpu_family(), meson returns "sparc" for 32-bit sparc,
and "sparc64" for 64-bit sparc, regardless of the OS in use.

For cpu(), meson returns values like "sun4v" on Solaris/SPARC,
and doesn't promise stability of the values, or portability across
OS'es, unlike cpu_family().

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2070>
2025-10-21 13:52:48 +02:00
Enrico Weigelt, metux IT consult
6f3a4caf97 xfree86: xv: fix missed hooking of WindowDestroy
Forgot to register window destroy hook - that's leading to crash:

    https://github.com/X11Libre/xserver/issues/959

Fixes: b60581e393
Bug: https://github.com/X11Libre/xserver/issues/959
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-09-26 17:08:41 +02:00
Enrico Weigelt, metux IT consult
56b47805a5 bugfix release 25.0.0.12
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
xlibre-xserver-25.0.0.12
2025-09-26 16:59:58 +02:00
Enrico Weigelt, metux IT consult
e3b0007db1 Xext: namespace: fix NULL derefence on client close
Removing the namespace assignment of killed clients in ClientState-hook
is too early - we still need it later. Using the new ClientDestroyCallback
instead.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-09-26 16:49:51 +02:00
Enrico Weigelt, metux IT consult
bc53cfa275 dix: add callback before ClientRec is being destroyed
Existing client-state hook isn't sufficient for this, and so easy to
be extended cleanly (*1). Adding a new callback is trivial and cheap,
so preferring this way, instead of trying to tweak the existing hook
for something it's never been designed for.

*1) see discussion here: https://github.com/X11Libre/xserver/pull/1077

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-09-26 16:49:51 +02:00
Enrico Weigelt, metux IT consult
19527ac905 render: fix missing include in glyphstr.h
Need to include renderproto.h

Closes: https://github.com/X11Libre/xserver/issues/700
Reported-By: Kevin Kofler <kevin@tigcc.ticalc.org>
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-09-26 16:45:33 +02:00
Enrico Weigelt, metux IT consult
536719a49d .github: use our own mirrors of build dependencies
f.d.o is failing too often in recent times, so switching to our
own mirrors at github.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-09-18 10:27:55 +02:00
Enrico Weigelt, metux IT consult
12bc7c4988 glx: fix wrong swapped encoding in __glXDisp_QueryExtensionsString()
The name string is supposed to be transmitted as-is, not swapped in
4-byte chunks.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-09-10 11:51:17 +02:00
Enrico Weigelt, metux IT consult
a358ff66fc .github: ubuntu: drop xtrans dependency
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-09-02 13:34:03 +02:00
Enrico Weigelt, metux IT consult
e102c54a28 fb: fix unused function fbInitializeDrawable()
>  ../fb/fbpixmap.c:32:20: warning: unused function 'fbInitializeDrawable' [-Wunused-function]
>      32 | static inline void fbInitializeDrawable(DrawablePtr pDrawable) {}

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-29 19:05:04 +02:00
Enrico Weigelt, metux IT consult
ce9b894f07 include: os.h: fix extra ;
Fix pedantic warnings:

> ../include/os.h:144:71: warning: ISO C does not allow extra ‘;’ outside of a function [-Wpedantic]
>   144 | XNFalloc(unsigned long /*amount */ ) __attribute__((returns_nonnull));;

> ../include/os.h:158:76: warning: ISO C does not allow extra ‘;’ outside of a function [-Wpedantic]
>   158 | XNFcallocarray(size_t nmemb, size_t size) __attribute__((returns_nonnull));;

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-29 19:04:14 +02:00
Enrico Weigelt, metux IT consult
c4f4ad4d93 xfree86: x86emu: drop assert() on uninitialized variable
If assert()s actually enabled, we're having undefined behaviour.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-29 19:01:11 +02:00
Enrico Weigelt, metux IT consult
237d7b1740 .github: don't ignore failing tests anymore
Now that the test suite has been fixed to work on the CI, we no longer
need (and should) ignore broken test runs.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-29 13:29:16 +02:00
Enrico Weigelt, metux IT consult
06a24773d7 bugfix release 25.0.0.11
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
xlibre-xserver-25.0.0.11
2025-08-29 09:32:48 +02:00
Enrico Weigelt, metux IT consult
1d23bf78b3 .github: fix MacOS build
MacOS build suddenly missing xvfb-run, which did work up until few hours ago.
Therefore, make a quick workaround, until the situation is clearly resolved.

The only impact is that some XTS tests (which are ignored on MacOS anyways)
might not work properly.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-28 23:23:52 +02:00
Enrico Weigelt, metux IT consult
056ac73757 bugfix release 25.0.0.10
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
xlibre-xserver-25.0.0.10
2025-08-28 19:40:58 +02:00
Enrico Weigelt, metux IT consult
f3f6b8a510 .github: make release message job depend on builds
Make sure the release message won't be created when build jobs on the
release tag didn't succeed.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-28 12:57:24 +02:00
Enrico Weigelt, metux IT consult
ec7d647236 test: allow skipping tests on Xephyr with GLES
The GLES tests need an actual GPU (/dev/dri/* device), which is not available
within github CI runners, so we need to skip those when running there.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-28 11:50:22 +02:00
Enrico Weigelt, metux IT consult
c4377c8252 .github: ubuntu: tests: enforce using llvmpipe
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-28 11:19:40 +02:00
Enrico Weigelt, metux IT consult
cc8af9e764 .github: fix tetexec.cfg creation
We need to run the Xts build inside Xvfb, because it needs a running
Xserver for creating tetexec.cfg.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-27 18:58:49 +02:00
Enrico Weigelt, metux IT consult
2cee98c407 test: run various common commands like dpyinfo
Run various common checking commands like xdpyinfo, xvinfo, etc
on both Xvfb directly, as well as Xephyr inside Xvfb.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-27 14:44:42 +02:00
Enrico Weigelt, metux IT consult
e6b0a56076 test: make rendercheck triangles optional
The triangles test of rendercheck is known to be (partially broken on Xephyr,
since it doesn't fully support transparency (eg. a8 surfaces).

Therefore make it optional, so we're not spammed too much by false alarms

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-27 14:34:38 +02:00
Enrico Weigelt, metux IT consult
1cff4cae67 .github: update piglit version
Update piglit version used within the test stage to current master.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-27 14:20:40 +02:00
Enrico Weigelt, metux IT consult
7a2103fc17 .github: use a smarter cloning script
Several sites we need to clone our dependencies from (eg. freedesktop.org)
have pretty unreliable servers, so our CI jobs often fail just because
of temporary clone failure.

Therefore adding a separate cloning script, which is more clever with automatic
retries, but it also tries to keep the traffic low (eg. trying shallow clones
if possible) and automatically detecting whether we're pulling a ref or a
direct commit.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-27 13:25:09 +02:00
Enrico Weigelt, metux IT consult
91cd4e2115 .github: catch piglit results as artifacts
Also store the piglit results into the build artifacts, so we can now
easily look at them later.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-27 12:48:24 +02:00
Enrico Weigelt, metux IT consult
51b5019fe2 Xext: xres: fix XResQueryClientResources request
been using the wrong index for retrieving the resource type atom.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-27 10:06:22 +02:00
Enrico Weigelt, metux IT consult
169a44fcd0 bugfix release 25.0.0.9 xlibre-xserver-25.0.0.9 2025-08-20 14:38:56 +02:00
Enrico Weigelt, metux IT consult
39dfed90fd xkb: fix swapping bug in ProcXkbGetKbdByName()
We've been adding the individual sub-packet's payload bytes *after*
the swapping, which is leading to totally wrong sizes.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-18 17:26:00 +02:00
Enrico Weigelt, metux IT consult
e40749beb3 dix: fix memory clearing in dix_main()
Clearing of screens and gpuscreens pointer list on teardown has been wrong.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-15 14:26:09 +02:00
Enrico Weigelt, metux IT consult
5c659b4b06 randr: fix size parameter to WriteToClient()
Size computation needs to be done on the struct actually written.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-14 16:48:07 +02:00
Enrico Weigelt, metux IT consult
d3573913c3 Xi: fix size parameter to WriteToClient()
Size computation needs to be done on the struct actually written.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-14 16:47:54 +02:00
Enrico Weigelt, metux IT consult
7236546874 namespace: fix naming in examples, errors and comments
At some places, there's still the word 'contianer' instead of 'namespace'

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-13 11:49:21 +02:00
Enrico Weigelt, metux IT consult
fcae57263d namespace: allow "namespace" config directive instead of "container"
The namespace config still has the "container" directive, which should have
been named "namespace". It's a leftover from the original working draft that
was named "container extension".

For the time being, keep backwards compatibility by allowing both tokens
"container" as well as "namespace" for the same directive. But consider the
old token as deprecated, it shouldn't be used anymore and might go away
in the near future.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-13 11:48:52 +02:00
Enrico Weigelt, metux IT consult
ef31842e84 Xext: shape: fix non-ximerama build
In the non-XINERAMA code path, a parameter was missing.

Fixes: a57db845bb
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-12 11:07:24 +02:00
Enrico Weigelt, metux IT consult
c998f14c76 dbe: fix screen cleanup
The 2nd loop is supposed to free the privates and also clear the pointer
to them. But it instead of clearing the walk'ed pointer, it only clears
the one in the last screen left from the upper loop.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-11 15:22:30 +02:00
Enrico Weigelt, metux IT consult
e4836d4e0f bugfix release xlibre-xserver-25.0.0.8
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
xlibre-xserver-25.0.0.8
2025-08-05 19:04:34 +02:00
Enrico Weigelt, metux IT consult
ebb3660f64 Xext: xv: fix redefinition of typedef 'XvPortNotifyPtr'
In file included from ../Xext/xvmc.c:14:
  ../Xext/xvdix_priv.h:31:21: warning: redefinition of typedef 'XvPortNotifyPtr' is a C11 feature [-Wtypedef-redefinition]
     31 | } XvPortNotifyRec, *XvPortNotifyPtr;
        |                     ^
  ../Xext/xvdix.h:73:34: note: previous definition is here
     73 | typedef struct _XvPortNotifyRec *XvPortNotifyPtr;
        |                                  ^
  1 warning generated.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-05 18:59:43 +02:00
Enrico Weigelt, metux IT consult
8e72499df7 os: ospoll: include winsock2.h on WIN32 instead of misc.h
On WIN32 we need to include winsock2.h, but we can't include misc.h here
becaues it pulling in X11 headers that are conflicting with win32 headers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-05 16:54:00 +02:00
Enrico Weigelt, metux IT consult
23aa722c15 os: move X_NOTIFY_* defines to separate header
These defines are already public, used by consumers of SetNotifyFd(),
but also needed in places where os.h cannot be included.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-05 16:53:28 +02:00
Enrico Weigelt, metux IT consult
8a8c29165a os: xserver_poll: skip defining symbols already defined by mingw
mingw already has struct pollfd and POLL* defines.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-05 16:20:56 +02:00
Enrico Weigelt, metux IT consult
c4ebb312d0 os: ospoll: add missing include of <assert.h>
We're using assert() here, so need to include <assert.h>

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-05 15:15:14 +02:00
Enrico Weigelt, metux IT consult
cbd5a06c81 record: stop using request length fields
The request struct's length fields aren't used anymore - we have the
client->req_len field instead, which also is bigreq-compatible.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-05 15:08:28 +02:00
Enrico Weigelt, metux IT consult
c64055b064 os: ospoll: use stdbool instead of X11's Bool
Low level OS specific code should not depend on higher level protocol
headers. This also removes yet another conflict with win32/mingw headers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-05 15:07:09 +02:00
Enrico Weigelt, metux IT consult
a425c0c00f os: ospoll: add missing include of <string.h>
Needed for memmove()

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-08-05 15:02:37 +02:00
Collin
5c48fa8f09 XKBMAlloc: Solve CodeQL Alert Potential use after double free 2025-08-05 14:56:02 +02:00