Commit graph

823 commits

Author SHA1 Message Date
Enrico Weigelt, metux IT consult
7ea4e28f28 os: drop remains of STREAMSCONN
STREAMSCONN has been removed about a decade ago, but some comments
have been forgotten to be cleaned.

Fixes: b3e9c534e2
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1538>
(cherry picked from commit a4cb4bc4f8)
2026-01-25 10:39:53 -08:00
Enrico Weigelt, metux IT consult
f05897e027 os: secure-rpc: make build option tristate
Add support `auto` mode, which only enables secure-rpc when
dependencies are met.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1441>
(cherry picked from commit 620b678cfe)
2026-01-25 10:39:52 -08:00
Enrico Weigelt, metux IT consult
012ca2616e os: secure-rpc: check struct authdes_cred
Some platforms (eg. NetBSD) don't have DES support in rpc anymore, so we
should check, in order to prevent weird, hard to understand build breaks.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1441>
(cherry picked from commit 339717bac6)
2026-01-25 10:39:52 -08:00
Enrico Weigelt, metux IT consult
99192ff50f os: define SECURE_RPC locally instead of global config header
Since this define is only used inside os subdir, move the definition there
and out of the global config header. This also makes some further steps,
e.g. checking whether it's supported, a litle bit easier.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1441>
(cherry picked from commit d2d3f4a700)
2026-01-25 10:39:52 -08:00
Enrico Weigelt, metux IT consult
6738683d6d os: unexport ForceClockId()
This function is only intended for DDX'es (currently just Xwayland) that
need to force using another clock. Really shouldn't be called by drivers
or extensions.

Fixes: a779fda224
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1333>
(cherry picked from commit c17c527b9a)
2026-01-25 10:39:52 -08:00
Enrico Weigelt, metux IT consult
ba5996ef3b os: unexport ListenToAllClients()
It's just called by DIX, not by any drivers/modules, so no need to export it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1387>
(cherry picked from commit a0b69624f7)
2026-01-19 12:48:30 -08:00
Enrico Weigelt, metux IT consult
a94f1f04d9 os: unexport OnlyListenToOneClient()
Not used by any drivers, so no need to export it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1385>
(cherry picked from commit d18ef33099)
2026-01-19 12:48:30 -08:00
Enrico Weigelt, metux IT consult
ba89e22e7e os: unexport MakeClientGrabPervious() and MakeClientGrabImpervious()
Not used by any drivers, so no need to export them.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1384>
(cherry picked from commit 4c1795701c)
2026-01-19 12:48:30 -08:00
Enrico Weigelt, metux IT consult
e3610a9f5c os: fix missing include of misc.h in busfault.h
busfault.h is using FALSE, but didn't include misc.h, so it really
depends on include order whether it works.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1381>
(cherry picked from commit 3aa62ca6f0)
2026-01-19 12:48:30 -08:00
Enrico Weigelt, metux IT consult
e50bf99ec4 os: unexport OsVendorVErrorFProc pointer
This pointer allows a DDX to install it's own error print handler. It's really
only intended for DDXes, thus no need to have it exported to modules.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1369>
(cherry picked from commit 76d01e9bf6)
2026-01-19 12:48:30 -08:00
Enrico Weigelt, metux IT consult
48490209d2 os: unexport OsLookupColor()
It's an internal function, only used by DIX, not by drivers and shouldn't
have been exported in the first place.

Fixes: 49f77fff14
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1373>
(cherry picked from commit 6cb599f59c)
2026-01-19 12:47:57 -08:00
Enrico Weigelt, metux IT consult
2321632c44 os: unexport xthread_sigmask
This function isn't used by drivers and there's currently no need to do so,
thus keep it out of the public module API.

Fixes: 30ac756798
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1368>
(cherry picked from commit 3b7a63e6ae)
2026-01-19 12:32:26 -08:00
Enrico Weigelt, metux IT consult
e702149e99 include: move busfault.h out of public include dir
this header is isn't public, so it's more appropriate, where the actual
code is, which is the os/ directory.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1337>
(cherry picked from commit dae76bbaaf)
2026-01-19 12:32:26 -08:00
Enrico Weigelt, metux IT consult
178ddbca96 os: connection: drop obsolete define Pid_t
Clean up a yet some more stale leftovers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1260>
(cherry picked from commit eac10cf1fa)
2026-01-19 12:32:26 -08:00
Enrico Weigelt, metux IT consult
a6339b6381 os: move SELinux enforcement state to the extension
Those fields are better off in the extension instead of the OS layer.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1328>
(cherry picked from commit 537293ff4e)
2026-01-19 12:32:24 -08:00
Enrico Weigelt, metux IT consult
a0554ea4a9 os: rpc: fix type mismatch
fix warning:

> ../os/rpcauth.c:159:16: warning: result of comparison of constant -1 with expression of type 'XID' (aka 'unsigned int') is always false [-Wtautological-constant-out-of-range-compare]
>     if (rpc_id == ~0L)
>         ~~~~~~ ^  ~~~

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1431>
(cherry picked from commit 8dc82a13a9)
2026-01-19 12:32:23 -08:00
Enrico Weigelt, metux IT consult
6d93688b5e os: fix missing include of <errno.h>
It's much cleaner to always include directly what one needs,
instead of relying on very indirect including.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1435>
(cherry picked from commit dfa606d5a4)
2026-01-19 12:32:23 -08:00
Enrico Weigelt, metux IT consult
706caadbf2 Fix missing include of <sys/wait.h>
Instead of relying on indirect includes, it's much cleaner if everybody
includes directly what he needs.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1419>
(cherry picked from commit ccfa7e9f2e)
2026-01-19 12:32:22 -08:00
Enrico Weigelt, metux IT consult
bb0c68997a os: move os_move_fd() out of public API
This function isn't used by any driver and doesn't seem to be useful for them,
thus move it out of the public module API, in order to tidy it up a bit.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1366>
(cherry picked from commit 15d3c1a6f1)
2026-01-19 12:32:20 -08:00
Enrico Weigelt, metux IT consult
0d3481defe os: fix missing X11/Xdefs.h include in os/osdep.h
osdep.h needs Bool type, which is defined X11/Xdefs.h.
For now it works, since Xdefs usually is already included somewhere
else, but that's an unreliable programming styles which quickly hits
us when changing include order.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1366>
(cherry picked from commit 1bdbe1cb3f)
2026-01-19 12:32:20 -08:00
Enrico Weigelt, metux IT consult
6a9bd0533f os: unexport AutoResetServer()
This is an internal function, not used and not supposed to be used by
any drivers, so shouldn't have been exported in the first place.

Fixes: 49f77fff14
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1372>
(cherry picked from commit 934b771f7a)
2026-01-19 12:32:20 -08:00
Enrico Weigelt, metux IT consult
ea7bf6a352 include: move xsha1.h to os/
This header is never exported and belongs to OS layer, thus no need to have it
in include/ directory, where all the public ones are - better off under os/.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1350>
(cherry picked from commit 40c5d39c55)
2026-01-19 12:32:20 -08:00
Enrico Weigelt, metux IT consult
600d53e98f os: simplify win32 uname()
Just define struct utsname and a tiny uname() function instead of
cluttering the code with ifdef's.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
(cherry picked from commit 77f9792911)
2026-01-19 12:32:20 -08:00
Enrico Weigelt, metux IT consult
18ee3532f8 xwin: replace ZeroMemory()
replace Windows specific ZeroMemory (macro just calling memset())
by static initialization, calloc() and memset().

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
(cherry picked from commit 7bd19a9580)
2026-01-19 12:32:20 -08:00
Enrico Weigelt, metux IT consult
529aab2d7c os: fix mising prototype / include on WIN32 builds
[90/383] Compiling C object os/liblibxlibc.a.p/strcasestr.c.obj
359../os/strcasestr.c:45:1: warning: no previous prototype for ‘xstrcasestr’ [-Wmissing-prototypes]
360   45 | xstrcasestr(const char *s, const char *find)
361      | ^~~~~~~~~~~

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
(cherry picked from commit de34a20dc3)
2026-01-19 12:32:19 -08:00
Enrico Weigelt, metux IT consult
6cb6b75334 os: fix unused variable on WIN32 build
../os/access.c:443:18: warning: unused variable ‘n’ [-Wunused-variable]
420  443 |     register int n;
421      |                  ^
422

[120/383] Compiling C object os/liblibxserver_os.a.p/connection.c.obj
431../os/connection.c:137:14: warning: ‘ParentProcess’ defined but not used [-Wunused-variable]
432  137 | static Pid_t ParentProcess;
433      |              ^~~~~~~~~~~~~

../os/connection.c:132:13: warning: ‘RunFromSmartParent’ defined but not used [-Wunused-variable]
435  132 | static Bool RunFromSmartParent; /* send SIGUSR1 to parent process */
436      |             ^~~~~~~~~~~~~~~~~~

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
(cherry picked from commit 0706c03f9d)
2026-01-19 12:32:19 -08:00
Enrico Weigelt, metux IT consult
cca930e210 os: fix unused variable on non-IPv6 build
[119/383] Compiling C object os/liblibxserver_os.a.p/access.c.obj
415../os/access.c: In function ‘DefineSelf’:
416../os/access.c:468:26: warning: unused variable ‘inet6addr’ [-Wunused-variable]
417  468 |     struct sockaddr_in6 *inet6addr;
418      |                          ^~~~~~~~~

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1295>
(cherry picked from commit 43a6d4eb61)
2026-01-19 12:32:19 -08:00
Enrico Weigelt, metux IT consult
d711c6380e os: drop unused GetAccessControl()
This function isn't used anywhere, not even in (known) modules/drivers.
So we can remove it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1343>
(cherry picked from commit 0f37f6fb4c)
2026-01-19 12:32:19 -08:00
Enrico Weigelt, metux IT consult
8c872eda63 dix: dixutils: make workQueue pointer dix-private
The workQueue pointer is currently declared extern, so that WaitForSomething()
can check wether we've got something in the queue and call ProcessWorkQueue()
then.

But that's trivial to simplify: just let ProcessWorkQueue() return early if
workQueue == NULL. Gives us a better isolation of internal stuff as well as
ProcessWorkQueue() protecting itself from possible segfault.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1310>
(cherry picked from commit af9f70013a)
2026-01-19 12:32:18 -08:00
Enrico Weigelt, metux IT consult
768333d2ff os: color: fix possible buffer overflow vulnerability
The old approach of builtin color lookup used a binary search of strings
within text blocks (their start offsets defined in the color array).

This could potentially lead to buffer overflow, if the requested color
name far outreaches the text block (eg. same prefix as some entry near to
the end, but really huge). This alone wouldn't allow remote memory readout
(just comparing), but could possibly trigger page faults (sigsegv) or used
as a building block for some more complex attack.

OTOH, the old approach is also hard to maintain, ugly programming style:
on each change, all the offset need to be carefully recounted, which is
pretty error-prone.

Both problems are solved by moving to simple, per-entry, char* pointers,
instead of the one large text block.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1313>
(cherry picked from commit 8c4a015cc2)
2026-01-19 12:32:18 -08:00
Enrico Weigelt, metux IT consult
a24bad63f0 os: oscolor: fix BuiltinColor field naming
The "name" field doesn't actually hold the color's name, but instead the
offset of the name in the string table block. Thus, fix the field's name
to reflect this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1313>
(cherry picked from commit 7a010beefe)
2026-01-19 12:32:18 -08:00
Alan Coopersmith
c17b579f15 unifdef SUNSYSV
I can't tell what this code was originally for - it was added in 1988,
4 years before the release of the SysV R4 release of Solaris 2.0, and
I can't find anywhere that defined SUNSYSV.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1315>
(cherry picked from commit a91a862332)
2026-01-19 12:32:18 -08:00
Alan Coopersmith
541bde66b7 unifdef apollo
Apollo Domain/OS died in the 1990's and has never been supported in
the modular Xserver builds.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
(cherry picked from commit 584a9715c3)
2026-01-19 12:32:17 -08:00
Matthieu Herrb
2cb7bebc1e OpenBSD build fix: struct ucred is struct sockpeercred there
(cherry picked from commit 7dfe1c56b0)
2026-01-19 12:32:17 -08:00
Alan Coopersmith
a8bb924af1 os: Assume all supported non-WIN32 platforms have seteuid & saved_ids
Removes fallback code to fork and exec a "cat" command to read files.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2024-02-10 00:05:54 +00:00
Zoltán Böszörményi
0df31f068d Use log lines prefixed with human readable time
Fixes: #399
Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
2023-12-17 19:37:03 +00:00
Jan Beich
5c8f70a17c os: Use KERN_PROC_ARGS to determine client command on DragonFly and FreeBSD 2023-12-17 17:16:23 +00:00
Jan Beich
58e8c967b6 os: Use LOCAL_PEERCRED to determine local client PID on FreeBSD
LOCAL_PEERCRED is similar to SO_PEERCRED but takes SOL_LOCAL. On DragonFly
cr_pid isn't supported yet, so fall back to getpeereid().

Based on https://gitlab.freedesktop.org/wayland/wayland/-/commit/54b237a61257
2023-12-17 17:07:16 +00:00
Sam James
94945a5274 Switch to libbsd-overlay
This is more portable than libbsd as everything Just Works, even on BSD systems,
and is the recommended method of consuming libbsd nowadays.

It also helpfully lets things work with glibc-provided functions for new
enough glibc.

Closes: https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/973
Co-authored-by: Guillem Jover <guillem@hadrons.org>
Signed-off-by: Sam James <sam@gentoo.org>
2023-08-16 19:56:50 +00:00
Simon Ser
21b3dad238 Allow disabling the SHAPE extension at runtime
To correctly render a window making use of SHAPE, a compositor
must query the shape rectangles. This may not be a desirable
feature for a Wayland compositor. Allow SHAPE to be turned off at
runtime, so that the compositor can opt-out.

Signed-off-by: Simon Ser <contact@emersion.fr>
2023-03-03 18:28:40 +00:00
Alan Coopersmith
d6b20f5e36 Remove "All rights reserved" from Oracle copyright notices
Oracle no longer includes this term in our copyright & license notices.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2023-02-25 09:40:41 -08:00
Jeremy Huddleston Sequoia
0ea9b59589 darwin: Implement DetermineClientCmd for macOS
Withoug a proper implementation of DetermineClientCmd, clients that
connect via an ssh tunnel are miscategorized as local.  This results
in failures when we try to use SCM_RIGHTS (eg: in MIT-SHM).

Fixes: https://github.com/XQuartz/XQuartz/issues/314
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2023-01-26 17:51:16 +00:00
Jeremy Huddleston Sequoia
8a4ab22873 os: Use LOCAL_PEERPID from sys/un.h if it is available to detemine the pid when falling back on getpeereids()
This provides a way to determine the pid of a peer connection on
systems like darwin that do not support getpeerucred() nor
SO_PEERCRED.

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2023-01-26 17:51:16 +00:00
Jeremy Huddleston Sequoia
165d5c1260 os: Update GetLocalClientCreds to prefer getpeerucred() or SO_PEERCRED over getpeereid()
GetLocalClientCreds() was preferring getpeereid() above other implementations.

getpeereid(), however, only returns the effective uid and gid of the peer,
leaving the pid unset.  When this happens, we are unable to use the pid to
determine the peer's command line arguments and incorrectly treat ssh-tunneled
traffic as local.

To address this, we now prioritize getpeerucred() or SO_PEERCRED as those two
implementations will return the pid in addition to uid and gid.

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2023-01-26 17:51:16 +00:00
Jeremy Huddleston Sequoia
2577291f01 os: Update AllocNewConnection() debug logging to include whether or not the client is local
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2023-01-26 17:51:16 +00:00
Peter Hutterer
412777664a Disallow byte-swapped clients by default
The X server swapping code is a huge attack surface, much of this code
is untested and prone to security issues. The use-case of byte-swapped
clients is very niche, so let's disable this by default and allow it
only when the respective config option or commandline flag is given.

For Xorg, this adds the ServerFlag "AllowByteSwappedClients" "on".
For all DDX, this adds the commandline options +byteswappedclients and
-byteswappedclients to enable or disable, respectively.

Fixes #1201

https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1029

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2023-01-06 11:59:37 +10:00
Julian Orth
762096628c os/connection: don't leave port uninitialized
If DISPLAY is set but does not start with `/`, `port` is now
initialized.

Fixes 83d0d91106
2022-12-29 21:05:26 +00:00
Peter Harris
2ab70dede7 os: Restore buffer when writing to network
The commit 9bf46610a9 "os: Immediately
queue initial WriteToClient" effectively disables buffering (of all
writes, not just the "initial" write), since the OS's network buffers
will usually be large enough to hold whatever replies we have sent.

This does improve performance when drawing over a Unix socket (I measure
approximtely 10%, not the ~5x mentioned in that commit message, probably
due to the large changes in this area since that commit), but it
decreases performance when drawing over a network due to the additional
TCP packets. This decrease is small (~10%) in most cases, but if the two
machines have mismatched Nagle / tcp_delay settings it can cause
XGetWindowAttributes to take 200ms (because it's composed of two
requests, the 2nd of which might wait for the ack which is delayed).

Avoid network slowdowns by making the immediate flush conditional on
who->local.

Signed-off-by: Peter Harris <pharris@opentext.com>
2022-09-09 16:52:43 +00:00
Alan Coopersmith
f8cbe96d14 os: Use memcpy() instead of memmove() when buffers are known not to overlap
Most of these came from a mass bcopy() -> memmove() substitution in 1993
with a commit comment of "Ansification (changed bfuncs -> mfuncs)"

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2022-08-29 21:10:51 +00:00
Jeremy Huddleston Sequoia
191e79afea meson: Use system method for locating tirpc
This avoids warnings from system headers when building with debian bullseye:

    In file included from ../dist-unpack/xserver-21.1.99.1/os/rpcauth.c:47:
    /usr/include/tirpc/rpc/rpc.h:83:12: error: redundant redeclaration of ‘bindresvport’ [-Werror=redundant-decls]
       83 | extern int bindresvport(int, struct sockaddr_in *);
          |            ^~~~~~~~~~~~
    In file included from /usr/include/tirpc/rpc/rpc.h:40,
                     from ../dist-unpack/xserver-21.1.99.1/os/rpcauth.c:47:
    /usr/include/netinet/in.h:503:12: note: previous declaration of ‘bindresvport’ was here
      503 | extern int bindresvport (int __sockfd, struct sockaddr_in *__sock_in) __THROW;
          |            ^~~~~~~~~~~~

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2022-07-01 21:38:54 +00:00