diff options
author | Yuxuan Shui <yshuiv7@gmail.com> | 2019-10-15 20:13:40 +0100 |
---|---|---|
committer | Yuxuan Shui <yshuiv7@gmail.com> | 2019-10-15 20:13:40 +0100 |
commit | a510b47aa073318df23531f48fd6ae3083baf703 (patch) | |
tree | 66d6eb4bd36d5b5da61ade54d6fdf7831cf0a38d /src/sys/socket | |
parent | a220ded341b826275b4243722af417f55cb23be0 (diff) | |
download | nix-a510b47aa073318df23531f48fd6ae3083baf703.zip |
Properly initialize msghdr when using musl
Because of the use of MaybeUninit::uninit, the padding fields in msghdr,
which only present on musl builds, are not initialized. Causing garbage
data to be sent to the kernel. This change ensures the paddings are
always zeroed.
Diffstat (limited to 'src/sys/socket')
-rw-r--r-- | src/sys/socket/mod.rs | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/sys/socket/mod.rs b/src/sys/socket/mod.rs index ca4505fa..9e8cefae 100644 --- a/src/sys/socket/mod.rs +++ b/src/sys/socket/mod.rs @@ -857,7 +857,7 @@ pub fn sendmsg(fd: RawFd, iov: &[IoVec<&[u8]>], cmsgs: &[ControlMessage], let mhdr = unsafe { // Musl's msghdr has private fields, so this is the only way to // initialize it. - let mut mhdr = mem::MaybeUninit::<msghdr>::uninit(); + let mut mhdr = mem::MaybeUninit::<msghdr>::zeroed(); let p = mhdr.as_mut_ptr(); (*p).msg_name = name as *mut _; (*p).msg_namelen = namelen; @@ -910,7 +910,7 @@ pub fn recvmsg<'a>(fd: RawFd, iov: &[IoVec<&mut [u8]>], let mut mhdr = unsafe { // Musl's msghdr has private fields, so this is the only way to // initialize it. - let mut mhdr = mem::MaybeUninit::<msghdr>::uninit(); + let mut mhdr = mem::MaybeUninit::<msghdr>::zeroed(); let p = mhdr.as_mut_ptr(); (*p).msg_name = address.as_mut_ptr() as *mut c_void; (*p).msg_namelen = mem::size_of::<sockaddr_storage>() as socklen_t; |