aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2023-06-22 16:28:43 +0200
committerSimon Ser <contact@emersion.fr>2023-06-22 16:28:43 +0200
commit8714657d7bc6850a9d9c0591767bf13e80a55186 (patch)
treee32405c97ed5d0748254cad46bf1f1e67e541d7d
parentd59749aa44d2c69aa90cd0055214f4a9dfcddeea (diff)
xwayland: unset wlr_xwayland.server on destroy
This fixes a use-after-free in the Sway patch to filter the Xwayland shell [1]. The server is destroyed first, then the shell. The Xwayland process might still be using the shell while running. When the shell is destroyed, libwayland will invoke the global filter (to figure out whether to send a wl_registry.global_remove to clients). Then Sway will compare the client with wlr_xwayland_server.client. However, at that point, the server is gone. Reset the server to NULL so that Sway can check whether the server is still running. [1]: https://github.com/swaywm/sway/pull/7647
-rw-r--r--xwayland/xwayland.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/xwayland/xwayland.c b/xwayland/xwayland.c
index 75c09f31..7f3a6eae 100644
--- a/xwayland/xwayland.c
+++ b/xwayland/xwayland.c
@@ -75,6 +75,7 @@ void wlr_xwayland_destroy(struct wlr_xwayland *xwayland) {
wlr_xwayland_set_seat(xwayland, NULL);
wlr_xwayland_server_destroy(xwayland->server);
+ xwayland->server = NULL;
wlr_xwayland_shell_v1_destroy(xwayland->shell_v1);
free(xwayland);
}