From: kfraser@localhost.localdomain Date: Tue, 15 Aug 2006 15:25:39 +0000 (+0100) Subject: Set the close-on-exec flag on the xenstore fd in libxenstore. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15710^2~99 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e70f7a84ee670f3da1ae0f46f0731596ad9b42cf;p=xen.git Set the close-on-exec flag on the xenstore fd in libxenstore. Signed-off-by: Daniel P. Berrange --- diff --git a/tools/xenstore/xs.c b/tools/xenstore/xs.c index 6dea25451f..44c1baaf48 100644 --- a/tools/xenstore/xs.c +++ b/tools/xenstore/xs.c @@ -101,23 +101,31 @@ int xs_fileno(struct xs_handle *h) static int get_socket(const char *connect_to) { struct sockaddr_un addr; - int sock, saved_errno; + int sock, saved_errno, flags; sock = socket(PF_UNIX, SOCK_STREAM, 0); if (sock < 0) return -1; + if ((flags = fcntl(sock, F_GETFD)) < 0) + goto error; + flags |= FD_CLOEXEC; + if (fcntl(sock, F_SETFD, flags) < 0) + goto error; + addr.sun_family = AF_UNIX; strcpy(addr.sun_path, connect_to); - if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) { - saved_errno = errno; - close(sock); - errno = saved_errno; - return -1; - } + if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) + goto error; return sock; + +error: + saved_errno = errno; + close(sock); + errno = saved_errno; + return -1; } static int get_dev(const char *connect_to)