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>
This commit is contained in:
parent
6b8c2eb5c6
commit
d80f54ce53
@ -487,15 +487,15 @@ static ssize_t qio_channel_socket_readv(QIOChannel *ioc,
|
|||||||
|
|
||||||
memset(control, 0, CMSG_SPACE(sizeof(int) * SOCKET_MAX_FDS));
|
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_iov = (struct iovec *)iov;
|
||||||
msg.msg_iovlen = niov;
|
msg.msg_iovlen = niov;
|
||||||
if (fds && nfds) {
|
if (fds && nfds) {
|
||||||
msg.msg_control = control;
|
msg.msg_control = control;
|
||||||
msg.msg_controllen = sizeof(control);
|
msg.msg_controllen = sizeof(control);
|
||||||
|
#ifdef MSG_CMSG_CLOEXEC
|
||||||
|
sflags |= MSG_CMSG_CLOEXEC;
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
|
Loading…
Reference in New Issue
Block a user