Skip to content

Commit fedb9fd

Browse files
[libc] Fix sendmsg iovec unpoisoning (#115057)
The unpoisoning for sendmsg had a typo where it would not unpoison all of the elements in the iovec, causing msan errors. This patch fixes that.
1 parent 97262af commit fedb9fd

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

libc/src/sys/socket/linux/recvmsg.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020

2121
namespace LIBC_NAMESPACE_DECL {
2222

23-
LLVM_LIBC_FUNCTION(ssize_t, recvmsg,
24-
(int sockfd, struct msghdr *msg, int flags)) {
23+
LLVM_LIBC_FUNCTION(ssize_t, recvmsg, (int sockfd, msghdr *msg, int flags)) {
2524
#ifdef SYS_recvmsg
2625
ssize_t ret =
2726
LIBC_NAMESPACE::syscall_impl<ssize_t>(SYS_recvmsg, sockfd, msg, flags);
@@ -40,9 +39,11 @@ LLVM_LIBC_FUNCTION(ssize_t, recvmsg,
4039
}
4140

4241
// Unpoison the msghdr, as well as all its components.
42+
MSAN_UNPOISON(msg, sizeof(msghdr));
4343
MSAN_UNPOISON(msg->msg_name, msg->msg_namelen);
44+
4445
for (size_t i = 0; i < msg->msg_iovlen; ++i) {
45-
MSAN_UNPOISON(msg->msg_iov->iov_base, msg->msg_iov->iov_len);
46+
MSAN_UNPOISON(msg->msg_iov[i].iov_base, msg->msg_iov[i].iov_len);
4647
}
4748
MSAN_UNPOISON(msg->msg_control, msg->msg_controllen);
4849

0 commit comments

Comments
 (0)