1From 92091a697ae8dac4026fd75a421ad9464aaa253e Mon Sep 17 00:00:00 2001 2From: jiangheng <jiangheng14@huawei.com> 3Date: Wed, 25 Oct 2023 15:44:19 +0800 4Subject: [PATCH 76/77] fix recvmsg return EINVAL 5 6--- 7 src/api/sockets.c | 12 ++++++++++++ 8 1 file changed, 12 insertions(+) 9 10diff --git a/src/api/sockets.c b/src/api/sockets.c 11index b6c7b05..1d71427 100644 12--- a/src/api/sockets.c 13+++ b/src/api/sockets.c 14@@ -1492,9 +1492,21 @@ lwip_recvmsg(int s, struct msghdr *message, int flags) 15 /* check for valid vectors */ 16 buflen = 0; 17 for (i = 0; i < message->msg_iovlen; i++) { 18+#if GAZELLE_ENABLE 19+ /* msg_iov[i].iov_len == 0 dont return ERRVAL 20+ * According to the Single Unix Specification we should return EINVAL if an elment length is < 0 21+ * when cast to ssize_t 22+ */ 23+ if ((message->msg_iov[i].iov_base == NULL) || ((ssize_t)message->msg_iov[i].iov_len < 0) || 24+#else 25 if ((message->msg_iov[i].iov_base == NULL) || ((ssize_t)message->msg_iov[i].iov_len <= 0) || 26+#endif 27 ((size_t)(ssize_t)message->msg_iov[i].iov_len != message->msg_iov[i].iov_len) || 28+#if GAZELLE_ENABLE 29+ ((ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len) < 0)) { 30+#else 31 ((ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len) <= 0)) { 32+#endif 33 sock_set_errno(sock, err_to_errno(ERR_VAL)); 34 done_socket(sock); 35 return -1; 36-- 372.27.0 38 39