From 57a7458d7f9bdeed08e3218b4e9738facf189c02 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Thu, 3 Feb 2011 17:59:07 +0000 Subject: [PATCH] _dbus_listen_tcp_socket: avoid leaking listen_fd in unlikely circumstances If getaddrinfo (with port == 0) succeeds, the kernel gives us a port when we first listen on a socket, we jump back to redo_lookup_with_port, and getaddrinfo (with the nonzero port) fails, we leak listen_fd and all the fds in it. From the department of "without static analysis we'd never have spotted this", or possibly "backward goto considered harmful". Bug: https://bugs.freedesktop.org/show_bug.cgi?id=29881 Bug-NB: NB#180486 CID-2389 --- dbus/dbus-sysdeps-unix.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index fdea634..6f7c7c5 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -1311,13 +1311,14 @@ _dbus_listen_tcp_socket (const char *host, hints.ai_flags = AI_ADDRCONFIG | AI_PASSIVE; redo_lookup_with_port: + ai = NULL; if ((res = getaddrinfo(host, port, &hints, &ai)) != 0 || !ai) { dbus_set_error (error, _dbus_error_from_errno (errno), "Failed to lookup host/port: \"%s:%s\": %s (%d)", host ? host : "*", port, gai_strerror(res), res); - return -1; + goto failed; } tmp = ai; -- 1.7.2.3