summaryrefslogtreecommitdiffstats
path: root/io
diff options
context:
space:
mode:
authorDr. David Alan Gilbert2021-04-21 13:28:30 +0200
committerDr. David Alan Gilbert2021-06-08 20:36:16 +0200
commitd80f54ce53167e38623b8aafe8317458a6d7a6cd (patch)
treeb3471e71991723958a1c84db304c5aba18628a24 /io
parentmigration/rdma: Fix cm event use after free (diff)
downloadqemu-d80f54ce53167e38623b8aafe8317458a6d7a6cd.tar.gz
qemu-d80f54ce53167e38623b8aafe8317458a6d7a6cd.tar.xz
qemu-d80f54ce53167e38623b8aafe8317458a6d7a6cd.zip
channel-socket: Only set CLOEXEC if we have space for fds
MSG_CMSG_CLOEXEC cleans up received fd's; it's really only for Unix sockets, but currently we enable it for everything; some socket types (IP_MPTCP) don't like this. Only enable it when we're giving the recvmsg room to receive fd's anyway. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-Id: <20210421112834.107651-2-dgilbert@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Diffstat (limited to 'io')
-rw-r--r--io/channel-socket.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/io/channel-socket.c b/io/channel-socket.c
index de259f7eed..606ec97cf7 100644
--- a/io/channel-socket.c
+++ b/io/channel-socket.c
@@ -487,15 +487,15 @@ static ssize_t qio_channel_socket_readv(QIOChannel *ioc,
memset(control, 0, CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS));
-#ifdef MSG_CMSG_CLOEXEC
- sflags |= MSG_CMSG_CLOEXEC;
-#endif
-
msg.msg_iov = (struct iovec *)iov;
msg.msg_iovlen = niov;
if (fds && nfds) {
msg.msg_control = control;
msg.msg_controllen = sizeof(control);
+#ifdef MSG_CMSG_CLOEXEC
+ sflags |= MSG_CMSG_CLOEXEC;
+#endif
+
}
retry: