!984 [sync] PR-979: sync example: solve double free
From: @openeuler-sync-bot Reviewed-by: @jiangheng12 Signed-off-by: @jiangheng12
This commit is contained in:
commit
2aa238d1cd
@ -0,0 +1,52 @@
|
||||
From 6b097278f9d70f3cc976d7a7078447975de6a4b7 Mon Sep 17 00:00:00 2001
|
||||
From: zhengjiebing <zhengjiebing_yewu@cmss.chinamobile.com>
|
||||
Date: Mon, 29 Jul 2024 14:07:21 +0800
|
||||
Subject: [PATCH] rtc: do_lwip_init_sock no need to create ring in rtc mode
|
||||
|
||||
---
|
||||
src/lstack/api/lstack_rtc_api.c | 8 --------
|
||||
src/lstack/core/lstack_lwip.c | 9 +++++++++
|
||||
2 files changed, 9 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/lstack/api/lstack_rtc_api.c b/src/lstack/api/lstack_rtc_api.c
|
||||
index ca0e7ec..e30718c 100644
|
||||
--- a/src/lstack/api/lstack_rtc_api.c
|
||||
+++ b/src/lstack/api/lstack_rtc_api.c
|
||||
@@ -50,14 +50,6 @@ int rtc_socket(int domain, int type, int protocol)
|
||||
|
||||
/* need call stack thread init function */
|
||||
ret = lwip_socket(domain, type, protocol);
|
||||
- if (ret >= 0) {
|
||||
- struct lwip_sock *sock = lwip_get_socket(ret);
|
||||
- sock->stack = get_protocol_stack();
|
||||
- sock->epoll_events = 0;
|
||||
- sock->events = 0;
|
||||
- sock->wakeup = NULL;
|
||||
- list_init_node(&sock->event_list);
|
||||
- }
|
||||
return ret;
|
||||
}
|
||||
|
||||
diff --git a/src/lstack/core/lstack_lwip.c b/src/lstack/core/lstack_lwip.c
|
||||
index 271e94f..4ea13ad 100644
|
||||
--- a/src/lstack/core/lstack_lwip.c
|
||||
+++ b/src/lstack/core/lstack_lwip.c
|
||||
@@ -154,6 +154,15 @@ int do_lwip_init_sock(int32_t fd)
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ if (get_global_cfg_params()->stack_mode_rtc) {
|
||||
+ sock->stack = stack;
|
||||
+ sock->epoll_events = 0;
|
||||
+ sock->events = 0;
|
||||
+ sock->wakeup = NULL;
|
||||
+ list_init_node(&sock->event_list);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
reset_sock_data(sock);
|
||||
|
||||
sock->recv_ring = gazelle_ring_create_fast("sock_recv", SOCK_RECV_RING_SIZE, RING_F_SP_ENQ | RING_F_SC_DEQ);
|
||||
--
|
||||
2.33.0
|
||||
|
||||
99
0253-example-solve-double-free.patch
Normal file
99
0253-example-solve-double-free.patch
Normal file
@ -0,0 +1,99 @@
|
||||
From c49e92c7fc0a76fbc605c2b67fd46deba7953e1a Mon Sep 17 00:00:00 2001
|
||||
From: hkk <hankangkang5@huawei.com>
|
||||
Date: Thu, 5 Sep 2024 09:55:36 +0800
|
||||
Subject: [PATCH] example: solve double free
|
||||
|
||||
---
|
||||
examples/src/server.c | 21 +++++++++++----------
|
||||
1 file changed, 11 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/examples/src/server.c b/examples/src/server.c
|
||||
index 7bc7d9e..b53e005 100644
|
||||
--- a/examples/src/server.c
|
||||
+++ b/examples/src/server.c
|
||||
@@ -69,7 +69,7 @@ void sermud_info_print(struct ServerMud *server_mud)
|
||||
struct timeval end;
|
||||
gettimeofday(&end, NULL);
|
||||
uint64_t end_time = (uint64_t)end.tv_sec * 1000 + (uint64_t)end.tv_usec / 1000;
|
||||
-
|
||||
+
|
||||
double bytes_sub = end_recv_bytes > begin_recv_bytes ? (double)(end_recv_bytes - begin_recv_bytes) : 0;
|
||||
double time_sub = end_time > begin_time ? (double)(end_time - begin_time) / 1000 : 0;
|
||||
|
||||
@@ -93,7 +93,7 @@ int32_t sermud_worker_create_epfd_and_reg(struct ServerMudWorker *worker_unit)
|
||||
} else {
|
||||
worker_unit->epfd = epoll_create(SERVER_EPOLL_SIZE_MAX);
|
||||
}
|
||||
-
|
||||
+
|
||||
if (worker_unit->epfd < 0) {
|
||||
PRINT_ERROR("server can't create epoll %d! ", worker_unit->epfd);
|
||||
return PROGRAM_FAULT;
|
||||
@@ -118,7 +118,7 @@ int32_t sermud_listener_create_epfd_and_reg(struct ServerMud *server_mud)
|
||||
} else {
|
||||
server_mud->epfd = epoll_create(SERVER_EPOLL_SIZE_MAX);
|
||||
}
|
||||
-
|
||||
+
|
||||
if (server_mud->epfd < 0) {
|
||||
PRINT_ERROR("server can't create epoll %d! ", server_mud->epfd);
|
||||
return PROGRAM_FAULT;
|
||||
@@ -236,15 +236,16 @@ static int32_t server_handler_close(int32_t epfd, struct ServerHandler *server_h
|
||||
{
|
||||
int32_t fd = server_handler->fd;
|
||||
struct epoll_event ep_ev;
|
||||
- if (server_handler) {
|
||||
- free(server_handler);
|
||||
- }
|
||||
|
||||
if (epoll_ctl(epfd, EPOLL_CTL_DEL, fd, &ep_ev) < 0) {
|
||||
PRINT_ERROR("server can't delete socket '%d' to control epoll %d! ", fd, errno);
|
||||
return PROGRAM_FAULT;
|
||||
}
|
||||
|
||||
+ if (server_handler) {
|
||||
+ free(server_handler);
|
||||
+ }
|
||||
+
|
||||
if (close(fd) < 0) {
|
||||
PRINT_ERROR("server can't close the socket %d! ", errno);
|
||||
return PROGRAM_FAULT;
|
||||
@@ -335,7 +336,7 @@ int32_t sermud_listener_proc_epevs(struct ServerMud *server_mud)
|
||||
|
||||
for (int32_t i = 0; i < epoll_nfds; ++i) {
|
||||
struct epoll_event *curr_epev = server_mud->epevs + i;
|
||||
-
|
||||
+
|
||||
if (curr_epev->events & (EPOLLERR | EPOLLHUP | EPOLLRDHUP)) {
|
||||
PRINT_ERROR("server epoll wait error %d! ", curr_epev->events);
|
||||
server_handler_close(server_mud->epfd, (struct ServerHandler *)curr_epev->data.ptr);
|
||||
@@ -540,7 +541,7 @@ void sermum_info_print(struct ServerMum *server_mum)
|
||||
struct timeval end;
|
||||
gettimeofday(&end, NULL);
|
||||
uint64_t end_time = (uint64_t)end.tv_sec * 1000 + (uint64_t)end.tv_usec / 1000;
|
||||
-
|
||||
+
|
||||
double bytes_sub = end_recv_bytes > begin_recv_bytes ? (double)(end_recv_bytes - begin_recv_bytes) : 0;
|
||||
double time_sub = end_time > begin_time ? (double)(end_time - begin_time) / 1000 : 0;
|
||||
|
||||
@@ -564,7 +565,7 @@ int32_t sersum_create_epfd_and_reg(struct ServerMumUnit *server_unit)
|
||||
} else {
|
||||
server_unit->epfd = epoll_create(SERVER_EPOLL_SIZE_MAX);
|
||||
}
|
||||
-
|
||||
+
|
||||
if (server_unit->epfd < 0) {
|
||||
PRINT_ERROR("server can't create epoll %d! ", server_unit->epfd);
|
||||
return PROGRAM_FAULT;
|
||||
@@ -784,7 +785,7 @@ void *sersum_create_and_run(void *arg)
|
||||
exit(PROGRAM_FAULT);
|
||||
}
|
||||
}
|
||||
-
|
||||
+
|
||||
close(server_unit->listener.fd);
|
||||
close(server_unit->epfd);
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
Name: gazelle
|
||||
Version: 1.0.2
|
||||
Release: 60
|
||||
Release: 61
|
||||
Summary: gazelle is a high performance user-mode stack
|
||||
License: MulanPSL-2.0
|
||||
URL: https://gitee.com/openeuler/gazelle
|
||||
@ -268,6 +268,8 @@ Patch9248: 0248-tools-fix-sync-patch-script-date-wrong-and-update-th.patch
|
||||
Patch9249: 0249-epoll-fix-wild-pointer-detected-by-cooddy.patch
|
||||
Patch9250: 0250-tools-fix-script-generate-patchname-wrong.patch
|
||||
Patch9251: 0251-fix-when-errno-is-ENOTCONN-ignore-it.patch
|
||||
Patch9252: 0252-rtc-do_lwip_init_sock-no-need-to-create-ring-in-rtc-.patch
|
||||
Patch9253: 0253-example-solve-double-free.patch
|
||||
|
||||
%description
|
||||
%{name} is a high performance user-mode stack.
|
||||
@ -309,6 +311,10 @@ install -Dpm 0640 %{_builddir}/%{name}-%{version}/src/ltran/ltran.conf %{b
|
||||
%config(noreplace) %{conf_path}/ltran.conf
|
||||
|
||||
%changelog
|
||||
* Fri Sep 13 2024 yinbin6 <yinbin8@huawei.com> - 1.0.2-61
|
||||
- example: solve double free
|
||||
- rtc: do_lwip_init_sock no need to create ring in rtc mode
|
||||
|
||||
* Fri Sep 06 2024 yinbin6 <yinbin8@huawei.com> - 1.0.2-60
|
||||
- fix: when errno is ENOTCONN, ignore it
|
||||
- tools: fix script generate patchname wrong
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user