Commit Graph

20713 Commits

Author SHA1 Message Date
Enrico Weigelt, metux IT consult 942b0e96c4 Xext: xf86bigfont: fix FTBS on wrong packet length variable.
The `buflength` variable doesn't exist anymore, it's `rlength`.
And even if the reply struct might have the same size as XGenericReply,
it's cleaner to let the compiler compute it explicitly, just in case.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-12 16:11:00 +02:00
Enrico Weigelt, metux IT consult e5c3e138d9 Xext: xf86bigfont: fix typo in ProcXF86BigfontQueryFont()
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-12 16:11:00 +02:00
Enrico Weigelt, metux IT consult 9453eaa1dc Xext: xf86bigfont: fix missing includes
It seems xf86bigfont hasn't been compile-tested for long time,
some includes were missing.

Note that fontstruct.h needs to come before libxfont2.h, because X11
headers tend to be not self-consistent :(

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-12 16:11:00 +02:00
Enrico Weigelt, metux IT consult e1282e8078 os: fix missing include of Xext/xf86bigfontsrv.h
We're calling XF86BigfontCleanup() from AbortServer(), so we need
it's prototype.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-12 16:11:00 +02:00
Thomas Debesse 24e978b1f1 README.md: fix video drivers being mistakenly named as input drivers 2025-06-11 12:55:05 +02:00
Enrico Weigelt, metux IT consult 0cafe943a9 README.md: formatting contact list as table
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-11 11:58:20 +02:00
catfromplan9 735b4e29b6 Add matrix room to README.md 2025-06-11 11:49:00 +02:00
Felipe Contreras 2eca1414db xkb: fix regression in GetDeviceInfo
This fixes a regression in 5499a2999 (xkb: let SendDeviceLedFBs() fill buffer instead of writing directly, 2024-07-16).

We need to write the whole buffer, and the updated length has to take
into consideration that `sz` now contains `led_len` so we need to
subtract that or properly calculate the remaining size.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
2025-06-10 21:16:19 +02:00
Enrico Weigelt, metux IT consult 0ee4908052 COPYING: add myself
I believe I have contributed enough to be mentioned here ;-)

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-10 20:29:38 +02:00
Enrico Weigelt, metux IT consult af649598eb README.md: update driver repo URLs
Since Redhat deleted everything related to Xlibre from freedesktop.org,
the driver repos had to be moved to github.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-10 20:19:38 +02:00
Enrico Weigelt, metux IT consult 610e91dc5f README.md: update due recent events of Redhat's censorship
Add update on recent censorship by Redhat employees on freedesktop.org.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-06 18:57:04 +02:00
Enrico Weigelt, metux IT consult 7c114b00d1 dix: add RootWindowFinalizeCallback() to symbol table for legacy Nvidia.
Nvidia has a strange habit of messing with really internal stuff,
so need to add it to the executable's symbol table.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 17:50:09 +02:00
Enrico Weigelt, metux IT consult 73d2d90329 dix: add AllocColormap() to symbol table for internal wfb module
As long as the wfb module is still a separate shared object, this
function needs to be in the symbol table.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:25:14 +02:00
Enrico Weigelt, metux IT consult 0dbcde06a2 xfree86: mark xf86configptr exported for Nvidia legacy
Nvidia has a strange habit of messing with really internal stuff,
so need to add it to the executable's symbol table.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:23:13 +02:00
Enrico Weigelt, metux IT consult ad55e24173 panoramix: export XRC_DRAWABLE for Nvidia legacy
Yet another temporary re-export for Nvidia's proprietary driver.
This symbol really shouldn't be used at all by drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:11:41 +02:00
Enrico Weigelt, metux IT consult baa7187bcc Xnamespace: add some documentation
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:57 +02:00
Enrico Weigelt, metux IT consult b7155bf86d Xnamespace: add support for multiple auth tokens per namespace
Support having more than one auth token per namespace, so separate tokens
can be handed out to clients that are still landing in the same namespace.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:57 +02:00
Enrico Weigelt, metux IT consult c9ac021203 Xnamespace: initial config loader
This loads the configuration (simple text file) passed via command line.
For now just supporting static configuration, that's loaded on server
startup.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:57 +02:00
Enrico Weigelt, metux IT consult 0349f669a8 Xnamespace: property access hook
Filter property access. Right now just allowed inside same namespace,
or when caller is in root namespace.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:57 +02:00
Enrico Weigelt, metux IT consult f5f45fae5e Xnamespace: whitelist access to some server resources
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:57 +02:00
Enrico Weigelt, metux IT consult 0de8d77da5 Xnamespace: whitelist some XI operations
Whitelisting some XI operations in various hooks.

Note that some additional filtering needs to be done in send or
receive hook in order to prevent clients to receive possibly sensible
input data from the root window.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:57 +02:00
Enrico Weigelt, metux IT consult b215e1b11c Xnamespace: filter access on other clients
Restrict access to other clients within same namespace.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:57 +02:00
Enrico Weigelt, metux IT consult c78f53baa4 Xnamespace: filter client-to-client message sending
Filter message sending by clients. Only sending within the same
namespace is allowed (except for clients in a NS with superpowers,
e.g. root)

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:57 +02:00
Enrico Weigelt, metux IT consult 179952577f Xnamespace: filter server access
Whitelisting several server access calls that are safe, rejecting the rest.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:57 +02:00
Enrico Weigelt, metux IT consult 856656fa2b Xnamespace: filter device access
Filter device access, whitelist several commonly used operations that
should be safe (eg. query keyboard layout).

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult b8e375641a Xnamespace: whitelist access to namespace virtual root window
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 797bb1fc02 Xnamespace: whitelist certain operations on (real) root window
CreateWindow() needs access to root window, in order to create
top level windows. Whitelisting this operation.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult d00e191dcd Xnamespace: whitelist resource access for serverClient
The server itself is allowed to access anything w/o restrictions.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult d9d47ec8a1 Xnamespace: whitelist resource access within same namespace
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult 140105dcf0 Xnamespace: filter transparency
Silently drop transparency flag if namespace isn't allowed to use it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult bc3c3481c1 Xnamespace: filter extension access
Whitelist several extension calls that are safe. Also allow namespaces
to be configured for unrestricted access.

TBD: doesn't actually reject 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 42f7918a23 Xnamespace: filter raw mouse motion and keyboard access
Only namespaces with allowMouseOption flag enabled can receive
raw mouse motion events. Raw key press events are always blocked.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
Enrico Weigelt, metux IT consult d158f18a31 Xnamespace: isolate root window property access
Redirecting access to root window properties to the per-namespace
virtual root windows. This isolates a lot of communication via root
window, e.g. the cut buffers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-06-05 16:06:56 +02:00
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