Commit Graph

20680 Commits

Author SHA1 Message Date
Enrico Weigelt, metux IT consult a3307c656b Xnamespace: create per-namespace fake root windows
For each namespace creating a fake (invisible) root window, which can be
used for storing per-namespace properties (eg. cut buffers), etc.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 2edc4e39fc Xnamespace: add selection isolation
Selection names (as seen by the client) are internally prefixed with the
namespace ID, so each client can only access those within it's namespace.

If a client within namespace "foo" want's to operate on "PRIMARY",
it actually will be doing so on "<foo>PRIMARY", w/o ever noticing it.
Events will sent back to the client still pointing to "PRIMARY".

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 500ad18ebe Xnamespace: assign incoming clients to namespaces
The association is done by matching client's and namespace's
authentication token.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 7ba5730550 Xnamespace: add basic namespace config structures
Adding data structure and initial data for namespace configuration.

Built-in namespaces are ROOT and ANONYMOUS.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 8ff782af40 Xnamespace: namespace extension skeleton
Add tiny skeleton for the namespace extension. Disabled by default,
can be enabled via +extension arg, but doesn't actually do something yet.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 62ae266841 Xi: allow hooks to silently ignore SelectEvents request
When looking up the window to select on and security hook returns
BadAccess, the request is just silently ignored, instead of rejected.

This way, security hook can prevent untrusted clients to listen on
arbitrary windows, without the client even noticing. The client won't
get this BadAccess error, but instead thinking everything's fine,
just not getting the actual events.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 79157e95d9 include: list.h: add duplicate checking add/append functions
Simplify cases where callers need to check whether an entry already is
in a list before adding / appending.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult c09748c0c9 include: list.h: add xorg_list_present()
This function walks through the list and checks whether an entry is already
present. This check sometimes is neccessary, since trying to add an entry
twice has catastrophic consequences: iteration will become endless loop.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 765c034845 include: list.h: allow zero-initialization of struct xorg_list
Up until now, xorg_list's always need to be explicitly initialized by
calling xorg_list_init(), otherwise next access attempt will segfault.
This is adding extra complexity and risk of subtle bugs.

Adding some extra NULL check are trivial and their cost is so tiny
that it's even hard to practically measure.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 64f16b4c22 include: list.h: document things that must not be done
Add some warnings that list entries must not be added twice.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult af579756e9 include: list.h: fix inline docs for xorg_list_append()
The docs stated it's prepending, while it's actually appending.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 3c228e9e91 dix: helper for checking whether window ID belongs to a root window
This helper checks whether a given XID belongs to some screen's
root window. It does so by looking up the window and comparing that
with the window's screen's root window pointer. The resource lookup
is intentionally being on behalf of the serverClient, so the fired
XACE hook doesn't treat it as an actual client's request.

It's explicitly designed for being used by callback handlers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult a11d62d51f dix: helper for retrieving client owning a XID
Add a little helper that's looking up the ClientPtr to the client
of the owner of given XID. The lookup is solely done on the ID space,
the actual resource doesn't even need to exist.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 16461ea12a dix: add selection filtering hooks
Add hooks for filtering and fully rewrite rewrite selection requests
and events (what existing XACE hooks cannot do), e.g. for supporting
separate selection name spaces.

The hook can change individual fields in the parameter struct, so
operation continues with these changed values (eg. replace the original
selection name atom by a different one). It's also possible to stop
operations completely (with given result code) - in that case the
hook needs to take care of the remaining work to do (eg. sending events)

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 3dd9ac31d9 dix: add dixAllocServerXID()
Adding a separate function for allocating server-client's XIDs.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 7eed2c1bb7 dix: refine docs on DeliverDeviceEvents()
Adding a bit more explaination on how events are passed upwards.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult e2a374074c dix: hook for intercepting window property calls
This hook allows extensions to intercept client requests for changing
window attributes. It can either change the parameters or skip the
entire call (eg. handle all itself) so just the hook provided result
code is returned to the client.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 2cc51aaf5f dix: clean up MakeWindowOptional() calls and add alloc fault checks
a) no need to checking for win->optional == NULL before calling
   MakeWindowOptional(), because it checks itself
   (except some cases where it's presence has it's own semantics,
   or prevent unnecessary allocations)
b) lots of call sites didn't check for allocation failure.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 1cd1170599 dix: unexport MakeWindowOptional()
Really internal, should not be used by drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 47b9e71ab3 dix: registry: add LookupDixAccessName()
Helper for converting Xace access masks to human-readable text.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 7dda656db7 dix: add callback for post root window init
Allow extensions to catch in right after a screen's root window has
been finally initialized

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 709b2d005a mi: mark miWindowExposures() and miExpandDirectColors() exported
These are used by the in-tree libwfb.so module. As long as this an shared
object, instead of being directly linked into the executable, these symbols
need to be in the executable's symbol table. Nevertheless, they're not making
them part of the public SDK/module ABI, unless there's a really hard reason.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:50 +02:00
Enrico Weigelt, metux IT consult 65034050f6 meson_options: disable Xwayland by default
Xwayland is a separate project/team and has it's own releases, so it's better
trying to to intefer with them and disable it by default.

It still can be easily enabled via meson arguments, and it's still enabled
in the CI. Let distros and operators decide on their own whether they want it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 15:36:09 +02:00
Enrico Weigelt, metux IT consult 018703ce07 randr: re-export RRTransformSetFilter() for Nvidia legacy
NVidia's proprietary driver does it's own randr implementation (why ?)
and needs this function for this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 15:36:04 +02:00
Enrico Weigelt, metux IT consult 71242d24bc randr: re-export RRClientKnowsRates() for Nvidia legacy
NVidia's proprietary driver does it's own randr implementation (why ?)
and needs this function for this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 15:36:00 +02:00
Enrico Weigelt, metux IT consult bebc7c0f8e randr: re-export RRProviderSetCapabilities() for Nvidia legacy
NVidia's proprietary driver does it's own randr implementation (why ?)
and needs this function for this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 15:35:55 +02:00
Enrico Weigelt, metux IT consult 0523adf6d0 randr: re-export RRProviderCreate() for Nvidia legacy
NVidia's proprietary driver does it's own randr implementation (why ?)
and needs this function for this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 15:35:50 +02:00
Enrico Weigelt, metux IT consult 358853f35d randr: re-export RRCrtcDetachScanoutPixmap() for Nvidia legacy
NVidia's proprietary driver does it's own randr implementation (why ?)
and needs this function for this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 15:35:45 +02:00
Enrico Weigelt, metux IT consult 8141970be4 randr: re-export RRCrtcGetTransform() for Nvidia legacy
NVidia's proprietary driver does it's own randr implementation (why ?)
and needs this function for this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 15:35:41 +02:00
Enrico Weigelt, metux IT consult 30e59a9f4f xfree86: add per major-version driver/module subdirectories
Modules are now placed into a sub-directory by major Xserver release,
so we have less hassle with trying to load drivers w/ incompatible ABI.

The legacy directories are still searched (after the versioned ones)
for backwards compat with badly maintained proprietary drivers (Nvidia).

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:14 +02:00
Enrico Weigelt, metux IT consult c4b0a77713 Revert "(!1991) xfree86: xf86Option: unexport xf86MarkOptionUsedByName()"
Reverting commit 63c8a689c3 on request by Nvidia
(proprietary driver)

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:14 +02:00
Enrico Weigelt, metux IT consult ae632dac9b randr: re-export RRCrtcGetScanoutSize() for Nvidia legacy
NVidia's proprietary driver does it's own randr implementation (why ?)
and needs this function for this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:14 +02:00
Enrico Weigelt, metux IT consult 15716c7a9b randr: re-export RROutputSetNonDesktop() for Nvidia legacy
NVidia's proprietary driver does it's own randr implementation (why ?)
and needs this function for this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:14 +02:00
Enrico Weigelt, metux IT consult 683691ff85 randr: re-export some resource type fields for NVidia legacy
NVidia's proprietary driver does it's own randr implementation (why ?)
and needs those fields for this.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:14 +02:00
Enrico Weigelt, metux IT consult 085ca43c0c xfree86: compat: re-export MarkClientException() for horryibly maintained Nvidia
NVidia yet again doing crazy shit in their proprietary drivers:

This is an DIX-*internal* function for triggering client teardown when
connection broke or somehow lack of resources to accept new connections.
Video drivers have no business with that whatsoever - having them messing
with client client connections is just insane.

But still trying to be kind with Nvidia victims, thus adding a little wrapper
function under the old name. It spills out a log warning calling users to file
bug reports their driver vendor.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:14 +02:00
Enrico Weigelt, metux IT consult 76c976eda6 dix: rename MarkClientException() to dixMarkClientException()
DIX functions should have proper naming.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:14 +02:00
Enrico Weigelt, metux IT consult 96fa99d3b0 xfree86: increase ABI versions
Since *a lot* has changed since last Xserver release, need to increase
the ABI version.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:14 +02:00
Enrico Weigelt, metux IT consult 21b980a617 dix: fix guards in dix/window_priv.h
Renaming the guard define to _XSERVER_DIX_WINDOW_PRIV_H

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:14 +02:00
Enrico Weigelt, metux IT consult 847fd0eccc README.md: add upgrade notice
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 20:08:12 +02:00
Enrico Weigelt, metux IT consult 668ee9b2b4 xfree86: compat: re-add xf86Msg() for badly maintained drivers.
NVidia yet again lagging behind a year with trivial cleanups,
even though they're informed about this function being deprecated
and dropped.

It spills out a log warning calling users to file bug reports their
driver vendor.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 14:02:47 +02:00
Enrico Weigelt, metux IT consult c4da97eb69 Revert "(!1987) glamor: unexport GLAMOR_CREATE_PIXMAP_* defines"
This reverts commit 85267d38ac.

These are needed by the RDP module (www.xrdp.org).

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-04 14:02:35 +02:00
Enrico Weigelt, metux IT consult 1e4faee4e5 xfree86: fix possible buffer overflow in xf86PrintBanner()
There's chance of buffer overflow happending due lack of zero-termination
of printed string. Making sure the buffer is always propertly terminated.

See: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1821

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-03 19:26:12 +02:00
Enrico Weigelt, metux IT consult d10204372b xfree86: xf86Priv.h: unexport xf86HasTTYs()
Not used by any external drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-03 17:34:10 +02:00
Enrico Weigelt, metux IT consult 25744d6646 xfree86: xf86Priv.h: unexport xf86CallDriverProbe()
Not used by any external drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-03 17:34:10 +02:00
Enrico Weigelt, metux IT consult d421a618be xfree86: xf86Priv.h: unexport xf86LoadModules()
Not used by any external drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-03 17:34:10 +02:00
Enrico Weigelt, metux IT consult 266792630b xfree86: xf86Priv.h: unexport xf86CloseLog()
Not used by any external drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-03 17:34:10 +02:00
Enrico Weigelt, metux IT consult fd654c2967 xfree86: xf86Priv.h: unexport xf86LogInit()
Not used by any external drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-03 17:34:10 +02:00
Enrico Weigelt, metux IT consult 29a5ddd295 xfree86: xf86Priv.h: unexport xf86PMConfirmEventToOs field
Not used by any external drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-03 17:34:10 +02:00
Enrico Weigelt, metux IT consult ddb8441012 xfree86: xf86Priv.h: unexport xf86PMGetEventFromOs field
Not used by any external drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-03 17:34:09 +02:00
Enrico Weigelt, metux IT consult b5878c8f22 xfree86: xf86Priv.h: unexport xf86HandlePMEvents()
Not used by any external drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-03 17:34:09 +02:00