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