Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Aug 2023 12:47:21 GMT
From:      Dmitry Chagin <dchagin@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 2467ccddc0e0 - main - linux(4): Fix MSG_CTRUNC handling in recvmsg()
Message-ID:  <202308141247.37EClLOo044464@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202308141247.37EClLOo044464>