commit c90cb37b2a0861548461daa9b75d75317e01b679
parent 9a9be01ad4130e4e19b437fd064f90982974971f
Author: Kenny Levinsen <kl@kl.wtf>
Date: Wed, 2 Oct 2024 15:55:17 +0200
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.
Diffstat:
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git 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);
}