linux(4): Fix control message size calculation

To determine the size in bytes needed to hold a control message
and its contents of length len, CMSG_SPACE should be used.

Reviewed by:
Differential Revision:	https://reviews.freebsd.org/D41224
MFC after:		1 week
This commit is contained in:
Dmitry Chagin 2023-07-29 11:21:35 +03:00
parent 38588749af
commit 67116c6905

View File

@ -1852,7 +1852,7 @@ linux_recvmsg_common(struct thread *td, l_int s, struct l_msghdr *msghdr,
if (error != 0)
goto bad;
if (outlen + LINUX_CMSG_LEN(datalen) > maxlen) {
if (outlen + LINUX_CMSG_SPACE(datalen) > maxlen) {
if (outlen == 0) {
error = EMSGSIZE;
goto err;
@ -1871,7 +1871,7 @@ linux_recvmsg_common(struct thread *td, l_int s, struct l_msghdr *msghdr,
error = copyout(data, outbuf, datalen);
if (error == 0) {
outbuf += LINUX_CMSG_ALIGN(datalen);
outlen += LINUX_CMSG_LEN(datalen);
outlen += LINUX_CMSG_SPACE(datalen);
}
}
err: