No description
  • C 94.2%
  • Python 2.2%
  • Roff 1.2%
  • Objective-C 1%
  • Meson 0.9%
  • Other 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Mikhail Dmitrichenko da678e93cb xkb: reject incomplete keymaps in GetKbdByName
XkmReadFile() allocates an XkbDesc before it reads the individual XKM
sections, so a section read failure leaves a non-NULL but only partially
initialized description behind.

ReadXkmKeyTypes() does not report such a failure at all. When
XkbAllocClientMap() fails it returns the number of bytes read so far,
which is positive, so XkmReadFile() takes the section for successfully
read and clears it from the mask of sections it reports as missing.

ProcXkbGetKbdByName() in turn only checks that the description it got
back is non-NULL before setting rep.loaded. It can therefore install a
description that has neither a client map nor controls, and
XkbCopyControls() then dereferences those and crashes the server.

Return -1 from ReadXkmKeyTypes() when the client map cannot be
allocated, and only report a keymap as loaded once rep.found covers
every component in fneed. Decide whether to update the actions from
rep.loaded rather than from the requested load flag, so that an
incomplete description is not handled as a successfully loaded map.

The keymap the device already had stays active when the compiled XKM
cannot be read completely.

Signed-off-by: Mikhail Dmitrichenko <m.dmitrichenko222@gmail.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2304>
(cherry picked from commit 6a4fb12019)
(cherry picked from commit 44f4fd9f53)
2026-10-19 14:13:03 +02:00
.github ci(workflows): retry the DragonFlyBSD VM step on transient boot flakes 2026-10-13 19:20:54 +02:00
.gitlab-ci .github: switch dependencies to our new mirrors 2025-12-11 14:47:20 +01:00
composite Xext: composite: take the pixmap reference before AddResource() on Xinerama 2026-10-13 12:17:45 +02:00
config config/udev: guard against NULL subsystem in fallback bus id 2026-07-23 13:48:01 +02:00
dbe dbe: consistenly name reply structs "reply" instead of "rep" 2025-12-03 17:34:35 +01:00
dix dix, Xi: remove spurious dereference when checking function pointers 2026-10-15 16:48:01 +02:00
doc dix: unexport SwapLongs() 2025-11-25 18:26:02 +01:00
dri3 meson: only install dri3.h if building dri3 support 2026-10-05 09:23:49 +02:00
exa exa: silence -Wold-style-declaration warning from gcc 16 2026-08-24 12:41:56 +02:00
fb fb: Avoid potential out-of-bounds shift amounts in fbBlt 2026-10-06 19:17:57 +02:00
glamor glamor: size tmp_bits buffer for source coordinate range in upload_boxes 2026-10-08 18:10:22 +02:00
glx glx: validate dataBytes against cmdlen in RenderLarge first request 2026-10-08 17:46:39 +02:00
hw xfree86: seatd-libseat: release the GPU on platform device removal 2026-10-14 12:51:51 +02:00
include xkb: widen size_syms, num_syms, size_acts, num_acts to unsigned int 2026-10-08 20:46:29 +02:00
man dix: drop DE_RESET and associated cmdline args 2025-11-18 18:22:25 +01:00
mi mi: guard against NULL event pointer 2026-10-05 13:19:17 +02:00
miext miext/sync: Handle SIGBUS from truncated shm fences 2026-10-09 11:20:06 +02:00
os xquartz: fix regression due to unconditional usage of qos APIs 2026-10-13 13:22:19 +02:00
present present: unlink notifies from window list in present_clear_window_notifies 2026-10-08 17:45:51 +02:00
pseudoramiX pseudoramiX: drop obsolete support for internal server reset 2025-11-20 19:23:39 +01:00
randr randr: fix heap overflow and size tracking in RRChangeProviderProperty 2026-08-24 13:57:06 +02:00
record record: fix reply structs 2025-12-03 18:00:00 +01:00
render render: free animated cursor timers on destruction 2026-10-08 19:27:25 +02:00
test test/info: run display-info tests serialised to avoid display-number race 2026-10-19 14:10:27 +02:00
Xext Xext/namespace: fix potential NULL-pointer dereference in select_ns() 2026-10-08 14:49:51 +02:00
xfixes xfixes: swap nbytes before validating request length 2026-06-12 19:01:07 +02:00
Xi Xi: avoid memory leak when hitting bounds check for barrier events 2026-10-19 14:12:05 +02:00
xkb xkb: reject incomplete keymaps in GetKbdByName 2026-10-19 14:13:03 +02:00
.appveyor.yml os: use internal xtrans instead of external library 2025-07-18 22:29:38 +02:00
.dir-locals.el
.git-blame-ignore-revs
.gitignore
.gitlab-ci.yml .github: use our own mirrors instead of freedesktop.org 2025-12-10 19:55:35 +01:00
.mailmap Update mailmap for Peter Harris 2025-04-15 13:49:13 -04:00
.travis.yml
CoC.md it's time to add a CoC (code of conduct) 2025-06-12 17:21:47 +02:00
CODE_OF_CONDUCT.md it's time to add a CoC (code of conduct) 2025-06-12 17:21:47 +02:00
CONTRIBUTING.md fix minor spelling mistake in contributing guidelines 2025-09-05 15:05:37 +02:00
COPYING os: Use EVP APIs when building with OpenSSL 3 2025-12-12 14:28:18 +01:00
HISTORY.md HISTORY.md: add brief overview of the XLibre fork 2025-07-25 08:06:47 -04:00
meson.build meson: check cpu_family() instead of cpu() 2026-10-05 09:24:28 +02:00
meson_options.txt meson: drop obsolete vendor information options 2025-12-17 13:52:37 +01:00
NEWS release 25.1 2025-12-21 15:53:30 +01:00
README.md README.md: update for one year of XLibre 2026-06-05 12:40:41 -04:00
xlibre-server.pc.in xorg-server.pc: add more variables for easier driver builds 2026-01-08 17:28:38 +01:00
xorg-server.m4 xorg-server.m4: add helper macros for driver builds 2026-01-08 17:40:40 +01:00
xorg-server.pc.in xorg-server.pc: add more variables for easier driver builds 2026-01-08 17:28:38 +01:00
xserver.ent.in

XLibre Xserver

The XLibre Xserver is the community-managed display server for the X Window System Protocol Version 11 (Wikipedia), in short, X11.

1 year of XLibre screenshot
One Year of XLibre. See more liberated screens here.

Selected Features

  • All the good things from X.Org Server, including its unreleased features
  • TearFree modesetting by default and optionally atomic modesetting
  • Support for the Nvidia drivers 340, 390, 470, 570, and newer
  • Xnamespace extension for separating X clients
  • Support for seat management via seatd besides systemd-logind
  • Xfbdev, the generic framebuffer Xserver for Linux
  • CI builds for several BSDs, Linux, MacOS, and Microsoft Windows
  • Active community, cleanups, fixes, and development based on merit

To learn more about the features and mission of XLibre, please visit our homepage.

Switching to XLibre

The easiest way to install and run XLibre is to use your distribution's provided packages. Please see the Are We XLibre Yet? - (X11Libre/xserver Wiki) page for a list of the available options. If there is no option, then go on with building and installing XLibre from source.

Building XLibre

After cloning the Xserver repository or unpacking the sources and installing the dependencies, change into the source directory and run the Meson build tool:

cd "<source dir of xserver>"
meson setup <prefix> build <meson_options>
ninja -C build install

You may specify the install <prefix> with, for example, --prefix="$(pwd)/image" and add build time <meson_options> like so: -Dxnest=false. You may also want to build and install some graphics and input drivers. Please refer to the Building XLibre (X11Libre/xserver Wiki) page for more details.

Configuring XLibre

Until XLibre releases its own, you can find a detailed description of the configuration on the Configuration - Xorg (ArchWiki) page. If you have built and installed XLibre yourself, then change into the <prefix> directory with cd <prefix> and create a directory etc/X11 with a file xorg.conf and adjust it accordingly.

Starting with version 25.0.0.16, the proprietary Nvidia driver is autodetected and handled internally without any special configuration. Please see the Compatibility of XLibre (X11Libre/xserver Wiki) page for more details on the Nvidia driver and compatibility in general.

Running XLibre

If you installed XLibre using your distribution's provided packages, then the Xserver is usually started by init (Wikipedia) on system start. On other systems it should be possible to manually start XLibre with user permissions by invoking startx. Please refer to man startx for how to use it.

If you have built and installed XLibre yourself, then you may want to shutdown other Xservers, change into the <prefix> directory, and create a simple testx.sh file with the following contents:

#!/bin/sh
./bin/X :1 vt8 -logfile /dev/stdout &
_pid=$!
sleep 10 && kill $_pid

You can adjust the :1 vt8 and other options in the testx.sh file as detailed in man Xorg. Make the testx.sh executable and run it:

chmod 0770 testx.sh
./testx.sh

This should give you 10 glorious seconds of a black and beautiful and empty screen. Afterwards the Xserver complains about being killed, but there should be no other critical errors for a "test passed." For more details, please see Building XLibre (X11Libre/xserver Wiki).

I want to help!

That's great; there's enough to do for everyone. You may consider one of the many ideas and feature requests out there. To help in testing, you may consider becoming an XLibre Test Driver. Please also have a look at the good first and help wanted issues and the Liberated Screens.

If you want to work on anything, just let us know. If you have any questions, just ask. Thank you!

Contact

XLibre Discussions at GitHub | XLibre mailing list at FreeLists | @x11dev channel at Telegram | #xlibredev space at Matrix | XLibre security contact at GitHub