~ubuntu-x-swat/xorg-server:ubuntu

Last commit made on 2024-01-18
Get this branch:
git clone -b ubuntu https://git.launchpad.net/~ubuntu-x-swat/xorg-server
Members of Ubuntu-X can upload to this branch. Log in for directions.

Branch merges

Branch information

Name:
ubuntu
Repository:
lp:~ubuntu-x-swat/xorg-server

Recent commits

9608ce3... by Timo Aaltonen

upload to noble

12a2533... by Timo Aaltonen

Merge branch 'debian-unstable' into ubuntu

5783b1d... by Julien Cristau

Add changelog entry

f3afc1f... by Julien Cristau

Merge tag 'xorg-server-21.1.11' into debian-unstable

xorg-server-21.1.11

31407c0... by José Expósito

xserver 21.1.11

Signed-off-by: José Expósito <email address hidden>

a4f0e94... by Olivier Fourdan <email address hidden>

ephyr,xwayland: Use the proper private key for cursor

The cursor in DIX is actually split in two parts, the cursor itself and
the cursor bits, each with their own devPrivates.

The cursor itself includes the cursor bits, meaning that the cursor bits
devPrivates in within structure of the cursor.

Both Xephyr and Xwayland were using the private key for the cursor bits
to store the data for the cursor, and when using XSELINUX which comes
with its own special devPrivates, the data stored in that cursor bits'
devPrivates would interfere with the XSELINUX devPrivates data and the
SELINUX security ID would point to some other unrelated data, causing a
crash in the XSELINUX code when trying to (re)use the security ID.

CVE-2024-0409

Signed-off-by: Olivier Fourdan <email address hidden>
Reviewed-by: Peter Hutterer <email address hidden>
(cherry picked from commit 2ef0f1116c65d5cb06d7b6d83f8a1aea702c94f7)

8d825f7... by Olivier Fourdan <email address hidden>

glx: Call XACE hooks on the GLX buffer

The XSELINUX code will label resources at creation by checking the
access mode. When the access mode is DixCreateAccess, it will call the
function to label the new resource SELinuxLabelResource().

However, GLX buffers do not go through the XACE hooks when created,
hence leaving the resource actually unlabeled.

When, later, the client tries to create another resource using that
drawable (like a GC for example), the XSELINUX code would try to use
the security ID of that object which has never been labeled, get a NULL
pointer and crash when checking whether the requested permissions are
granted for subject security ID.

To avoid the issue, make sure to call the XACE hooks when creating the
GLX buffers.

Credit goes to Donn Seeley <email address hidden> for providing the patch.

CVE-2024-0408

Signed-off-by: Olivier Fourdan <email address hidden>
Acked-by: Peter Hutterer <email address hidden>
(cherry picked from commit e5e8586a12a3ec915673edffa10dc8fe5e15dac3)

5c4816a... by Peter Hutterer

dix: when disabling a master, float disabled slaved devices too

Disabling a master device floats all slave devices but we didn't do this
to already-disabled slave devices. As a result those devices kept their
reference to the master device resulting in access to already freed
memory if the master device was removed before the corresponding slave
device.

And to match this behavior, also forcibly reset that pointer during
CloseDownDevices().

Related to CVE-2024-21886, ZDI-CAN-22840

(cherry picked from commit 26769aa71fcbe0a8403b7fb13b7c9010cc07c3a8)

7b56943... by =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= <email address hidden>

Xi: do not keep linked list pointer during recursion

The `DisableDevice()` function is called whenever an enabled device
is disabled and it moves the device from the `inputInfo.devices` linked
list to the `inputInfo.off_devices` linked list.

However, its link/unlink operation has an issue during the recursive
call to `DisableDevice()` due to the `prev` pointer pointing to a
removed device.

This issue leads to a length mismatch between the total number of
devices and the number of device in the list, leading to a heap
overflow and, possibly, to local privilege escalation.

Simplify the code that checked whether the device passed to
`DisableDevice()` was in `inputInfo.devices` or not and find the
previous device after the recursion.

CVE-2024-21886, ZDI-CAN-22840

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

(cherry picked from commit bc1fdbe46559dd947674375946bbef54dd0ce36b)

6236342... by Peter Hutterer

Xi: flush hierarchy events after adding/removing master devices

The `XISendDeviceHierarchyEvent()` function allocates space to store up
to `MAXDEVICES` (256) `xXIHierarchyInfo` structures in `info`.

If a device with a given ID was removed and a new device with the same
ID added both in the same operation, the single device ID will lead to
two info structures being written to `info`.

Since this case can occur for every device ID at once, a total of two
times `MAXDEVICES` info structures might be written to the allocation.

To avoid it, once one add/remove master is processed, send out the
device hierarchy event for the current state and continue. That event
thus only ever has exactly one of either added/removed in it (and
optionally slave attached/detached).

CVE-2024-21885, ZDI-CAN-22744

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

(cherry picked from commit 4a5e9b1895627d40d26045bd0b7ef3dce503cbd1)