50 lines
1.9 KiB
Diff
50 lines
1.9 KiB
Diff
From 5924fd2879acbb52b12a61380b939cce30a133a9 Mon Sep 17 00:00:00 2001
|
|
From: jiangheng <jiangheng14@huawei.com>
|
|
Date: Sun, 28 Apr 2024 10:44:15 +0800
|
|
Subject: [PATCH] fix ioctl set failed
|
|
|
|
---
|
|
src/lstack/api/lstack_wrap.c | 24 +++++++++++++++++++-----
|
|
1 file changed, 19 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/lstack/api/lstack_wrap.c b/src/lstack/api/lstack_wrap.c
|
|
index c90aa04..7101d98 100644
|
|
--- a/src/lstack/api/lstack_wrap.c
|
|
+++ b/src/lstack/api/lstack_wrap.c
|
|
@@ -690,13 +690,27 @@ static int32_t do_select(int32_t nfds, fd_set *readfds, fd_set *writefds, fd_set
|
|
if (select_posix_path() == PATH_KERNEL || \
|
|
select_fd_posix_path(_fd, &sock) == PATH_KERNEL) \
|
|
return _fcntl_fn(_fd, _cmd, val); \
|
|
- int32_t ret = _fcntl_fn(_fd, _cmd, val); \
|
|
- if (ret == -1) \
|
|
- return ret; \
|
|
- return _lwip_fcntl(_fd, _cmd, val); \
|
|
+ int32_t ret1 = _fcntl_fn(_fd, _cmd, val); \
|
|
+ if (ret1 == -1) { \
|
|
+ LSTACK_LOG(ERR, LSTACK, "fd(%d) kernel path call failed, errno is %d, maybe not error\n", \
|
|
+ _fd, errno); \
|
|
+ return ret1; \
|
|
+ } \
|
|
+ int32_t ret2 = _lwip_fcntl(_fd, _cmd, val); \
|
|
+ /*
|
|
+ * if function not implemented, fcntl get/set context will not be modifyed by user path,
|
|
+ * return kernel path result
|
|
+ */ \
|
|
+ if (ret2 == -1) { \
|
|
+ if (errno == ENOSYS) { \
|
|
+ return ret1; \
|
|
+ } \
|
|
+ LSTACK_LOG(ERR, LSTACK, "fd(%d) user path call failed, errno is %d, maybe not error\n", \
|
|
+ _fd, errno); \
|
|
+ } \
|
|
+ return ret2; \
|
|
} while (0)
|
|
|
|
-
|
|
/* --------------------------------------------------------
|
|
* ------- LD_PRELOAD mode replacement interface --------
|
|
* --------------------------------------------------------
|
|
--
|
|
2.33.0
|
|
|