diff --git a/net/bluetooth/bluetooth_recvmsg.c b/net/bluetooth/bluetooth_recvmsg.c index 8de4323558e0d..9400e22cbe67e 100644 --- a/net/bluetooth/bluetooth_recvmsg.c +++ b/net/bluetooth/bluetooth_recvmsg.c @@ -330,6 +330,11 @@ ssize_t bluetooth_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, return -EPROTONOSUPPORT; } + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + /* Perform the packet recvmsg() operation */ /* Initialize the state structure. This is done with the network diff --git a/net/can/can_recvmsg.c b/net/can/can_recvmsg.c index 2226849e691be..d4c6f34d1b18c 100644 --- a/net/can/can_recvmsg.c +++ b/net/can/can_recvmsg.c @@ -526,6 +526,11 @@ ssize_t can_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, return -ENOSYS; } + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + net_lock(); /* Initialize the state structure. */ diff --git a/net/icmp/icmp_recvmsg.c b/net/icmp/icmp_recvmsg.c index d2da7402957e4..9fb43a61cfbe6 100644 --- a/net/icmp/icmp_recvmsg.c +++ b/net/icmp/icmp_recvmsg.c @@ -296,6 +296,11 @@ ssize_t icmp_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, /* Some sanity checks */ + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + DEBUGASSERT(buf != NULL); if (len < ICMP_HDRLEN) diff --git a/net/icmpv6/icmpv6_recvmsg.c b/net/icmpv6/icmpv6_recvmsg.c index aa6ffa11c7599..5e8d0c328b918 100644 --- a/net/icmpv6/icmpv6_recvmsg.c +++ b/net/icmpv6/icmpv6_recvmsg.c @@ -307,6 +307,11 @@ ssize_t icmpv6_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, /* Some sanity checks */ + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + DEBUGASSERT(buf != NULL); if (len < ICMPv6_HDRLEN) diff --git a/net/ieee802154/ieee802154_recvmsg.c b/net/ieee802154/ieee802154_recvmsg.c index 9654ddb5cc2ef..957c8660efb34 100644 --- a/net/ieee802154/ieee802154_recvmsg.c +++ b/net/ieee802154/ieee802154_recvmsg.c @@ -330,6 +330,11 @@ ssize_t ieee802154_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, return -EPROTONOSUPPORT; } + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + /* Perform the packet recvfrom() operation */ /* Initialize the state structure. This is done with the network diff --git a/net/inet/inet_sockif.c b/net/inet/inet_sockif.c index 3c30486018d15..b217a67ec35f7 100644 --- a/net/inet/inet_sockif.c +++ b/net/inet/inet_sockif.c @@ -2273,6 +2273,11 @@ static ssize_t inet_recvmsg(FAR struct socket *psock, { ssize_t ret; + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + /* If a 'from' address has been provided, verify that it is large * enough to hold this address family. */ diff --git a/net/local/local_recvmsg.c b/net/local/local_recvmsg.c index cdbb61ffbfa1d..7f44907650ea3 100644 --- a/net/local/local_recvmsg.c +++ b/net/local/local_recvmsg.c @@ -552,6 +552,11 @@ ssize_t local_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, return 0; } + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + DEBUGASSERT(buf); /* Check for a stream socket */ diff --git a/net/netlink/netlink_sockif.c b/net/netlink/netlink_sockif.c index 08ea9fb42530d..206444a4664b4 100644 --- a/net/netlink/netlink_sockif.c +++ b/net/netlink/netlink_sockif.c @@ -680,6 +680,11 @@ static ssize_t netlink_recvmsg(FAR struct socket *psock, DEBUGASSERT(from == NULL || (fromlen != NULL && *fromlen >= sizeof(struct sockaddr_nl))); + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + /* Find the response to this message. The return value */ entry = netlink_tryget_response(psock->s_conn); diff --git a/net/pkt/pkt_recvmsg.c b/net/pkt/pkt_recvmsg.c index d1f355fc459e8..79919516af8b6 100644 --- a/net/pkt/pkt_recvmsg.c +++ b/net/pkt/pkt_recvmsg.c @@ -410,6 +410,11 @@ ssize_t pkt_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, return -EINVAL; } + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + if (psock->s_type != SOCK_RAW) { nerr("ERROR: Unsupported socket type: %d\n", psock->s_type); diff --git a/net/rpmsg/rpmsg_sockif.c b/net/rpmsg/rpmsg_sockif.c index 1ca093768b85b..d03cbb290c97a 100644 --- a/net/rpmsg/rpmsg_sockif.c +++ b/net/rpmsg/rpmsg_sockif.c @@ -1240,6 +1240,11 @@ static ssize_t rpmsg_socket_recvmsg(FAR struct socket *psock, size_t len = msg->msg_iov->iov_len; ssize_t ret; + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + if (psock->s_type != SOCK_STREAM && _SS_ISBOUND(conn->sconn.s_flags) && !_SS_ISCONNECTED(conn->sconn.s_flags)) diff --git a/net/socket/recvmsg.c b/net/socket/recvmsg.c index e4d880ed5335d..408fdf2749525 100644 --- a/net/socket/recvmsg.c +++ b/net/socket/recvmsg.c @@ -88,11 +88,6 @@ ssize_t psock_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, return -EINVAL; } - if (msg->msg_iovlen != 1) - { - return -ENOTSUP; - } - /* Verify that the sockfd corresponds to valid, allocated socket */ if (psock == NULL || psock->s_conn == NULL) diff --git a/net/usrsock/usrsock_recvmsg.c b/net/usrsock/usrsock_recvmsg.c index e614d5c8f319c..c599526c35b45 100644 --- a/net/usrsock/usrsock_recvmsg.c +++ b/net/usrsock/usrsock_recvmsg.c @@ -222,6 +222,11 @@ ssize_t usrsock_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg, socklen_t outaddrlen = 0; ssize_t ret; + if (msg->msg_iovlen != 1) + { + return -ENOTSUP; + } + if (fromlen) { if (*fromlen > 0 && from == NULL)