From ac36082813c459e64ae1f564002a7cadfa0a7637 Mon Sep 17 00:00:00 2001 From: Sergi Granell Date: Mon, 1 Feb 2016 19:35:51 +0100 Subject: server: Fix possible wl_display_add_socket_fd memleak If wl_event_loop_add_fd failed, the fail path didn't free the newly allocated struct wl_socket. Reviewed-by: Derek Foreman --- src/wayland-server.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/wayland-server.c b/src/wayland-server.c index 6654cd7..3ba8a5d 100644 --- a/src/wayland-server.c +++ b/src/wayland-server.c @@ -1268,17 +1268,18 @@ wl_display_add_socket_fd(struct wl_display *display, int sock_fd) if (s == NULL) return -1; - /* Reuse the existing fd */ - s->fd = sock_fd; - - s->source = wl_event_loop_add_fd(display->loop, s->fd, + s->source = wl_event_loop_add_fd(display->loop, sock_fd, WL_EVENT_READABLE, socket_data, display); if (s->source == NULL) { wl_log("failed to establish event source\n"); + wl_socket_destroy(s); return -1; } + /* Reuse the existing fd */ + s->fd = sock_fd; + wl_list_insert(display->socket_list.prev, &s->link); return 0; -- cgit v1.2.1