• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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