From 80ee78bdb91db3625b62b9d5d5955cf9d2de4504 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 10 May 2020 08:16:01 -0700 Subject: [PATCH] chromium: musl: initialize msghdr in a compatible manner initialize msghdr in a compatible manner msghdr stuct from socket.h is not same between musl and glibc where musl claims to be more posix compliant where as glibc seems to fill whats needed for linux sizewise and chooses long enough types which maybe questionable, therefore constructing a structure with explicit constructor is not going to work correctly for musl and glibc at same time see https://git.musl-libc.org/cgit/musl/commit/arch/x86_64/bits/socket.h?id=7168790763cdeb794df52be6e3b39fbb021c5a64 This fix initialized the struct to 0 first and then sets the struct elements by name, so we dont have to hard code the positions of elements when initializing structure Upstream-Status: Pending Signed-off-by: Khem Raj --- chromium/net/socket/udp_socket_posix.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/chromium/net/socket/udp_socket_posix.cc b/chromium/net/socket/udp_socket_posix.cc index 572472a6993..504fdb5d5c6 100644 --- a/chromium/net/socket/udp_socket_posix.cc +++ b/chromium/net/socket/udp_socket_posix.cc @@ -1190,8 +1190,12 @@ SendResult UDPSocketPosixSender::InternalSendmmsgBuffers( for (auto& buffer : buffers) msg_iov->push_back({const_cast(buffer->data()), buffer->length()}); msgvec->reserve(buffers.size()); - for (size_t j = 0; j < buffers.size(); j++) - msgvec->push_back({{nullptr, 0, &msg_iov[j], 1, nullptr, 0, 0}, 0}); + for (size_t j = 0; j < buffers.size(); j++) { + struct msghdr m = {0}; + m.msg_iov = &msg_iov[j]; + m.msg_iovlen = 1; + msgvec->push_back({m, 0}); + } int result = HANDLE_EINTR(Sendmmsg(fd, &msgvec[0], buffers.size(), 0)); SendResult send_result(0, 0, std::move(buffers)); if (result < 0) {