diff options
| author | Furkan Sahin <furkan-dev@proton.me> | 2024-10-02 15:55:17 +0200 |
|---|---|---|
| committer | Furkan Sahin <furkan-dev@proton.me> | 2024-10-02 15:55:17 +0200 |
| commit | 2da33a71d1033b0ff411f0ad9be06fec522ee440 (patch) | |
| tree | 3df5136d7792f98dc8790478b1acef2b2671fd73 | |
| parent | 1f1bd1c5cc8e06b7267b6537be0bfe575cf6f7cd (diff) | |
Re-init renderer for all outputs on lost context
sway_root.outputs only include enabled outputs. We also need to re-init
the renderer for any disabled outputs, so use sway_root.all_outputs
instead.
Resolves the following heap-use-after-free accessing the render formats
when a disabled output is modeset after a GPU reset has occurred.
| -rw-r--r-- | sway/server.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sway/server.c b/sway/server.c index f16a55e2..941f4cb2 100644 --- a/sway/server.c +++ b/sway/server.c @@ -205,8 +205,8 @@ static void handle_renderer_lost(struct wl_listener *listener, void *data) { wlr_compositor_set_renderer(server->compositor, renderer); - for (int i = 0; i < root->outputs->length; ++i) { - struct sway_output *output = root->outputs->items[i]; + struct sway_output *output; + wl_list_for_each(output, &root->all_outputs, link) { wlr_output_init_render(output->wlr_output, server->allocator, server->renderer); } |
