mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-06-07 09:58:20 +02:00
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> |
||
|---|---|---|
| .. | ||
| bigreq | ||
| bugs | ||
| damage | ||
| pyxtest | ||
| scripts | ||
| sync | ||
| xi1 | ||
| xi2 | ||
| .gitignore | ||
| fixes.c | ||
| hashtabletest.c | ||
| input.c | ||
| list.c | ||
| meson.build | ||
| misc.c | ||
| README | ||
| sha1.c | ||
| signal-logging.c | ||
| simple-xinit.c | ||
| string.c | ||
| test_xkb.c | ||
| tests-common.c | ||
| tests-common.h | ||
| tests.c | ||
| tests.h | ||
| touch.c | ||
| xfree86.c | ||
| xtest.c | ||
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.