aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-10-13 10:58:59 +0200
committeremersion <contact@emersion.fr>2018-10-13 10:58:59 +0200
commitf9eb5df80eaabdc72b2f2aa0998b409a89c17f68 (patch)
tree98389afa2d6079a7ab847f89a785227b4ef5f28a /backend
parentcff471ce3ed2b3ceeb35c0b1c44fbde0a6533445 (diff)
backend: fix use-after-free in wlr_backend_autocreate
Found by clang static analyzer.
Diffstat (limited to 'backend')
-rw-r--r--backend/backend.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/backend/backend.c b/backend/backend.c
index 4b186767..c5dcdb48 100644
--- a/backend/backend.c
+++ b/backend/backend.c
@@ -217,16 +217,16 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display,
backend, &multi->session, name, create_renderer_func);
if (subbackend == NULL) {
wlr_log(WLR_ERROR, "failed to start backend '%s'", name);
- wlr_backend_destroy(backend);
wlr_session_destroy(multi->session);
+ wlr_backend_destroy(backend);
free(names);
return NULL;
}
if (!wlr_multi_backend_add(backend, subbackend)) {
wlr_log(WLR_ERROR, "failed to add backend '%s'", name);
- wlr_backend_destroy(backend);
wlr_session_destroy(multi->session);
+ wlr_backend_destroy(backend);
free(names);
return NULL;
}
@@ -272,8 +272,8 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display,
multi->session);
if (!libinput) {
wlr_log(WLR_ERROR, "Failed to start libinput backend");
- wlr_backend_destroy(backend);
wlr_session_destroy(multi->session);
+ wlr_backend_destroy(backend);
return NULL;
}
wlr_multi_backend_add(backend, libinput);
@@ -283,8 +283,8 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display,
if (!primary_drm) {
wlr_log(WLR_ERROR, "Failed to open any DRM device");
wlr_backend_destroy(libinput);
- wlr_backend_destroy(backend);
wlr_session_destroy(multi->session);
+ wlr_backend_destroy(backend);
return NULL;
}