1 Star 0 Fork 48

yc555/lwip

forked from src-openEuler/lwip 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0076-fix-recvmsg-return-EINVAL.patch 1.34 KB
一键复制 编辑 原始数据 按行查看 历史
jinag12 提交于 2024-02-06 10:45 . adapt lwip-2.2.0
From 92091a697ae8dac4026fd75a421ad9464aaa253e Mon Sep 17 00:00:00 2001
From: jiangheng <jiangheng14@huawei.com>
Date: Wed, 25 Oct 2023 15:44:19 +0800
Subject: [PATCH 76/77] fix recvmsg return EINVAL
---
src/api/sockets.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/api/sockets.c b/src/api/sockets.c
index a07fb59..575e298 100644
--- a/src/api/sockets.c
+++ b/src/api/sockets.c
@@ -1535,9 +1535,21 @@ lwip_recvmsg(int s, struct msghdr *message, int flags)
/* check for valid vectors */
buflen = 0;
for (i = 0; i < message->msg_iovlen; i++) {
+#if GAZELLE_ENABLE
+ /* msg_iov[i].iov_len == 0 dont return ERRVAL
+ * According to the Single Unix Specification we should return EINVAL if an elment length is < 0
+ * when cast to ssize_t
+ */
+ if ((message->msg_iov[i].iov_base == NULL) || ((ssize_t)message->msg_iov[i].iov_len < 0) ||
+#else
if ((message->msg_iov[i].iov_base == NULL) || ((ssize_t)message->msg_iov[i].iov_len <= 0) ||
+#endif
((size_t)(ssize_t)message->msg_iov[i].iov_len != message->msg_iov[i].iov_len) ||
+#if GAZELLE_ENABLE
+ ((ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len) < 0)) {
+#else
((ssize_t)(buflen + (ssize_t)message->msg_iov[i].iov_len) <= 0)) {
+#endif
set_errno(err_to_errno(ERR_VAL));
done_socket(sock);
return -1;
--
2.27.0
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yangchen555/lwip.git
git@gitee.com:yangchen555/lwip.git
yangchen555
lwip
lwip
master

搜索帮助