1*4882a593SmuzhiyunFrom e0b5335ced4cbc78847e63cc98e9c1a78f426c99 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Khem Raj <raj.khem@gmail.com> 3*4882a593SmuzhiyunDate: Sun, 10 May 2020 08:16:01 -0700 4*4882a593SmuzhiyunSubject: [PATCH] chromium: musl: initialize msghdr in a compatible manner 5*4882a593Smuzhiyun 6*4882a593Smuzhiyuninitialize msghdr in a compatible manner 7*4882a593Smuzhiyun 8*4882a593Smuzhiyunmsghdr stuct from socket.h is not same between musl and glibc 9*4882a593Smuzhiyunwhere musl claims to be more posix compliant where as glibc seems 10*4882a593Smuzhiyunto fill whats needed for linux sizewise and chooses long enough types 11*4882a593Smuzhiyunwhich maybe questionable, therefore constructing a structure with explicit 12*4882a593Smuzhiyunconstructor is not going to work correctly for musl and glibc at same time 13*4882a593Smuzhiyun 14*4882a593Smuzhiyunsee 15*4882a593Smuzhiyunhttps://git.musl-libc.org/cgit/musl/commit/arch/x86_64/bits/socket.h?id=7168790763cdeb794df52be6e3b39fbb021c5a64 16*4882a593Smuzhiyun 17*4882a593SmuzhiyunThis fix initialized the struct to 0 first and then sets the struct elements 18*4882a593Smuzhiyunby name, so we dont have to hard code the positions of elements when initializing 19*4882a593Smuzhiyunstructure 20*4882a593Smuzhiyun 21*4882a593SmuzhiyunUpstream-Status: Pending 22*4882a593SmuzhiyunSigned-off-by: Khem Raj <raj.khem@gmail.com> 23*4882a593Smuzhiyun--- 24*4882a593Smuzhiyun chromium/net/socket/udp_socket_posix.cc | 8 ++++++-- 25*4882a593Smuzhiyun 1 file changed, 6 insertions(+), 2 deletions(-) 26*4882a593Smuzhiyun 27*4882a593Smuzhiyundiff --git a/chromium/net/socket/udp_socket_posix.cc b/chromium/net/socket/udp_socket_posix.cc 28*4882a593Smuzhiyunindex 71265568be5..42e0d298045 100644 29*4882a593Smuzhiyun--- a/chromium/net/socket/udp_socket_posix.cc 30*4882a593Smuzhiyun+++ b/chromium/net/socket/udp_socket_posix.cc 31*4882a593Smuzhiyun@@ -1151,8 +1151,12 @@ SendResult UDPSocketPosixSender::InternalSendmmsgBuffers( 32*4882a593Smuzhiyun for (auto& buffer : buffers) 33*4882a593Smuzhiyun msg_iov->push_back({const_cast<char*>(buffer->data()), buffer->length()}); 34*4882a593Smuzhiyun msgvec->reserve(buffers.size()); 35*4882a593Smuzhiyun- for (size_t j = 0; j < buffers.size(); j++) 36*4882a593Smuzhiyun- msgvec->push_back({{nullptr, 0, &msg_iov[j], 1, nullptr, 0, 0}, 0}); 37*4882a593Smuzhiyun+ for (size_t j = 0; j < buffers.size(); j++) { 38*4882a593Smuzhiyun+ struct msghdr m = {0}; 39*4882a593Smuzhiyun+ m.msg_iov = &msg_iov[j]; 40*4882a593Smuzhiyun+ m.msg_iovlen = 1; 41*4882a593Smuzhiyun+ msgvec->push_back({m, 0}); 42*4882a593Smuzhiyun+ } 43*4882a593Smuzhiyun int result = HANDLE_EINTR(Sendmmsg(fd, &msgvec[0], buffers.size(), 0)); 44*4882a593Smuzhiyun SendResult send_result(0, 0, std::move(buffers)); 45*4882a593Smuzhiyun if (result < 0) { 46