git: 2467ccddc0e0 - main - linux(4): Fix MSG_CTRUNC handling in recvmsg()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 14 Aug 2023 12:47:21 UTC
The branch main has been updated by dchagin:
URL: https://cgit.FreeBSD.org/src/commit/?id=2467ccddc0e0f5c719eddaece69a7aa0589b6449
commit 2467ccddc0e0f5c719eddaece69a7aa0589b6449
Author: Dmitry Chagin <dchagin@FreeBSD.org>
AuthorDate: 2023-08-14 12:46:12 +0000
Commit: Dmitry Chagin <dchagin@FreeBSD.org>
CommitDate: 2023-08-14 12:46:12 +0000
linux(4): Fix MSG_CTRUNC handling in recvmsg()
The MSG_CTRUNC flag of the msg_flags member of the message header is
set uppon successful completition if the control data was truncated.
Upon return from a successful call msg_controllen should contain the
length of the control message sequence.
Fixes: 0eda2cea
MFC after: 1 week
---
sys/compat/linux/linux_socket.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index bd4b536e13d0..7acae92777f8 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -1835,8 +1835,8 @@ linux_recvmsg_common(struct thread *td, l_int s, struct l_msghdr *msghdr,
if (error != 0)
goto bad;
+ skiped = outlen = 0;
maxlen = l_msghdr.msg_controllen;
- l_msghdr.msg_controllen = 0;
if (control == NULL)
goto out;
@@ -1844,7 +1844,6 @@ linux_recvmsg_common(struct thread *td, l_int s, struct l_msghdr *msghdr,
msg->msg_control = mtod(control, struct cmsghdr *);
msg->msg_controllen = control->m_len;
outbuf = PTRIN(l_msghdr.msg_control);
- skiped = outlen = 0;
for (m = control; m != NULL; m = m->m_next) {
cm = mtod(m, struct cmsghdr *);
lcm->cmsg_type = bsd_to_linux_cmsg_type(p, cm->cmsg_type,
@@ -1910,9 +1909,9 @@ err:
error = EINVAL;
goto bad;
}
- l_msghdr.msg_controllen = outlen;
out:
+ l_msghdr.msg_controllen = outlen;
error = copyout(&l_msghdr, msghdr, sizeof(l_msghdr));
bad: