From c98b13e529ad44646f24a85a2d58fe6a79328489 Mon Sep 17 00:00:00 2001 From: Alan Somers Date: Fri, 11 Aug 2023 10:05:54 -0600 Subject: [PATCH] Fix an incorrect lifetime in the return value of recvmsg Fixes #2083 --- CHANGELOG.md | 2 ++ src/sys/socket/mod.rs | 2 +- test/sys/test_socket.rs | 11 ++++------- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 308f929025..7f0e1e01aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,8 @@ This project adheres to [Semantic Versioning](https://semver.org/). `SockaddrIn6::from`, `IpMembershipRequest::new`, and `Ipv6MembershipRequest::new` with future Rust versions. ([#2061](https://github.com/nix-rust/nix/pull/2061)) +- Fixed an incorrect lifetime returned from `recvmsg`. + ([#2095](https://github.com/nix-rust/nix/pull/2095)) ### Removed diff --git a/src/sys/socket/mod.rs b/src/sys/socket/mod.rs index 2e2897dbb2..4f25b6b69c 100644 --- a/src/sys/socket/mod.rs +++ b/src/sys/socket/mod.rs @@ -2058,7 +2058,7 @@ fn pack_mhdr_to_send<'a, I, C, S>( /// [recvmsg(2)](https://pubs.opengroup.org/onlinepubs/9699919799/functions/recvmsg.html) pub fn recvmsg<'a, 'outer, 'inner, S>(fd: RawFd, iov: &'outer mut [IoSliceMut<'inner>], mut cmsg_buffer: Option<&'a mut Vec>, - flags: MsgFlags) -> Result> + flags: MsgFlags) -> Result> where S: SockaddrLike + 'a, 'inner: 'outer { diff --git a/test/sys/test_socket.rs b/test/sys/test_socket.rs index f93a7339c3..ed1686e87d 100644 --- a/test/sys/test_socket.rs +++ b/test/sys/test_socket.rs @@ -239,13 +239,10 @@ pub fn test_recvmsg_sockaddr_un() { // Receive the message let mut recv_buffer = [0u8; 32]; - let received = socket::recvmsg( - sock.as_raw_fd(), - &mut [std::io::IoSliceMut::new(&mut recv_buffer)], - None, - MsgFlags::empty(), - ) - .unwrap(); + let mut iov = [std::io::IoSliceMut::new(&mut recv_buffer)]; + let received = + socket::recvmsg(sock.as_raw_fd(), &mut iov, None, MsgFlags::empty()) + .unwrap(); // Check the address in the received message assert_eq!(sockaddr, received.address.unwrap()); }