Skip to content

Commit d3dde1a

Browse files
jukkarcarlescufi
authored andcommitted
net: sockets: Fix sendmsg() user mode param checks for dst address
If we are calling sendmsg() for a connected socket, then msg_namelen is 0 and msg_name is NULL. Check these allowed values properly. Also modify unit tests so that we test this scenario. Fixes #25925 Signed-off-by: Jukka Rissanen <[email protected]>
1 parent 79728a6 commit d3dde1a

File tree

2 files changed

+7
-9
lines changed

2 files changed

+7
-9
lines changed

subsys/net/lib/sockets/sockets.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -643,11 +643,13 @@ static inline ssize_t z_vrfy_zsock_sendmsg(int sock,
643643
msg_copy.msg_iov[i].iov_len = msg->msg_iov[i].iov_len;
644644
}
645645

646-
msg_copy.msg_name = z_user_alloc_from_copy(msg->msg_name,
647-
msg->msg_namelen);
648-
if (!msg_copy.msg_name) {
649-
errno = ENOMEM;
650-
goto fail;
646+
if (msg->msg_namelen > 0) {
647+
msg_copy.msg_name = z_user_alloc_from_copy(msg->msg_name,
648+
msg->msg_namelen);
649+
if (!msg_copy.msg_name) {
650+
errno = ENOMEM;
651+
goto fail;
652+
}
651653
}
652654

653655
msg_copy.msg_control = z_user_alloc_from_copy(msg->msg_control,

tests/net/socket/udp/src/main.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -572,8 +572,6 @@ void test_v4_sendmsg_recvfrom_connected(void)
572572
msg.msg_controllen = sizeof(cmsgbuf.buf);
573573
msg.msg_iov = io_vector;
574574
msg.msg_iovlen = 1;
575-
msg.msg_name = &server_addr;
576-
msg.msg_namelen = sizeof(server_addr);
577575

578576
cmsg = CMSG_FIRSTHDR(&msg);
579577
cmsg->cmsg_len = CMSG_LEN(sizeof(int));
@@ -636,8 +634,6 @@ void test_v6_sendmsg_recvfrom_connected(void)
636634
msg.msg_controllen = sizeof(cmsgbuf.buf);
637635
msg.msg_iov = io_vector;
638636
msg.msg_iovlen = 1;
639-
msg.msg_name = &server_addr;
640-
msg.msg_namelen = sizeof(server_addr);
641637

642638
cmsg = CMSG_FIRSTHDR(&msg);
643639
cmsg->cmsg_len = CMSG_LEN(sizeof(int));

0 commit comments

Comments
 (0)