xserver/test
Peter Hutterer d9e5f941d3 test/pyxtest: add tests for miSyncDestroyFence/FreeCounter (ZDI-CAN-30159/30163)
Add SYNC extension protocol builders (proto/sync.py) and a regression test
that reproduces the miSyncDestroyFence and FreeCounter use-after-free.

The first test creates a fence and issues AwaitFence with the same fence ID
listed twice, creating two trigger list nodes pointing into one
SyncAwaitUnion. A second client then destroys the fence. Without the fix,
miSyncDestroyFence would invoke CounterDestroyed before saving the next
pointer, and the first callback would free the SyncAwaitUnion while the
second trigger list node still referenced it.

The second test creates a counter (value=0) and issues SyncAwait with two
conditions on the same counter, both waiting for value >= 1. Since the
counter is 0, Client A blocks. A second client then destroys the counter.
Without the fix, FreeCounter would invoke CounterDestroyed before saving
the next pointer in the trigger list, and the first callback would free
the SyncAwaitUnion while the second trigger node still referenced it.

ZDI-CAN-30163 (FreeCounter)
ZDI-CAN-30159 (miSyncDestroyFence)

Assisted-by: Claude:claude-opus-4-6
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2228>
2026-06-01 08:31:59 +10:00
..
bigreq test: Fix build dependency for bigreq test 2017-12-08 11:36:24 -05:00
bugs Strip trailing whitespace from source files 2026-01-25 10:40:02 -08:00
damage tests: Handle -Wanalyzer-possible-null-dereference in damage/primitives.c 2026-04-04 16:19:48 +00:00
pyxtest test/pyxtest: add tests for miSyncDestroyFence/FreeCounter (ZDI-CAN-30159/30163) 2026-06-01 08:31:59 +10:00
scripts os: drop SUN-DES-1 authentication 2026-01-25 10:39:53 -08:00
sync test: Fix xsync test 2026-01-25 10:40:01 -08:00
xi1 test: use a dbg() macro for the test output 2024-01-30 00:15:10 +00:00
xi2 Fix typos 2026-03-03 06:50:01 -03:00
.gitignore tests: Convert test/ to single binary 2017-01-12 15:01:36 -05:00
fixes.c test: switch the unit tests to something resembling a test suite 2024-01-30 00:15:10 +00:00
hashtabletest.c test: use a dbg() macro for the test output 2024-01-30 00:15:10 +00:00
input.c Fix typos 2026-03-03 06:50:01 -03:00
list.c test: remove stray semi-colons after functions 2026-01-25 10:40:01 -08:00
meson.build test: add pytest-based test suite 2026-05-10 23:42:43 +00:00
misc.c test: remove extra return 2026-01-25 10:40:01 -08:00
README test: Fix typo and drop documentation references to glib. 2015-09-23 10:48:12 -04:00
sha1.c test: add unit tests for x_sha1_* functions in os/xsha1.c 2026-01-25 10:40:02 -08:00
signal-logging.c test: specify non-negative log verbosity for the siglogging test 2024-01-30 00:15:10 +00:00
simple-xinit.c test: simple-xinit: add _X_NORETURN 2026-01-19 12:32:23 -08:00
string.c test: switch the unit tests to something resembling a test suite 2024-01-30 00:15:10 +00:00
test_xkb.c xkb: drop defining XKBSRV_NEED_FILE_FUNCS 2026-01-19 12:32:18 -08:00
tests-common.c test: switch the unit tests to something resembling a test suite 2024-01-30 00:15:10 +00:00
tests-common.h test: switch the unit tests to something resembling a test suite 2024-01-30 00:15:10 +00:00
tests.c test: add unit tests for x_sha1_* functions in os/xsha1.c 2026-01-25 10:40:02 -08:00
tests.h test: add unit tests for x_sha1_* functions in os/xsha1.c 2026-01-25 10:40:02 -08:00
touch.c treewide: replace xnfstrdup() calls by XNFstrdup() 2026-01-25 10:39:55 -08:00
xfree86.c test: switch the unit tests to something resembling a test suite 2024-01-30 00:15:10 +00:00
xtest.c test: switch the unit tests to something resembling a test suite 2024-01-30 00:15:10 +00:00

                        X server test suite

This suite contains a set of tests to verify the behaviour of functions used
internally to the server.

= How it works =
Through some automake abuse, we link the test programs with the same static
libraries as the Xorg binary. The test suites can then call various functions
and verify their behaviour - without the need to start the server or connect
clients.

This testing only works for functions that do not rely on a particular state
of the X server. Unless the test suite replicates the expected state, which
may be difficult.

= How to run the tests =
Run "make check" in the test directory. This will compile the tests and execute
them in the order specified in the TESTS variable in test/Makefile.am.

Each set of tests related to a subsystem are available as a binary that can be
executed directly. For example, run "xkb" to perform some xkb-related tests.

== Adding a new test ==
When adding a new test, ensure that you add a short description of what the
test does and what the expected outcome is.