diff --git a/0252-rtc-do_lwip_init_sock-no-need-to-create-ring-in-rtc-.patch b/0252-rtc-do_lwip_init_sock-no-need-to-create-ring-in-rtc-.patch new file mode 100644 index 0000000000000000000000000000000000000000..c8cc8bc9c32e49894363eef97a33125c7a866655 --- /dev/null +++ b/0252-rtc-do_lwip_init_sock-no-need-to-create-ring-in-rtc-.patch @@ -0,0 +1,52 @@ +From 6b097278f9d70f3cc976d7a7078447975de6a4b7 Mon Sep 17 00:00:00 2001 +From: zhengjiebing +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 + diff --git a/0253-example-solve-double-free.patch b/0253-example-solve-double-free.patch new file mode 100644 index 0000000000000000000000000000000000000000..51d8bd5f6cb7eada403951cad82c33498bcc5bab --- /dev/null +++ b/0253-example-solve-double-free.patch @@ -0,0 +1,99 @@ +From c49e92c7fc0a76fbc605c2b67fd46deba7953e1a Mon Sep 17 00:00:00 2001 +From: hkk +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 + diff --git a/gazelle.spec b/gazelle.spec index 760d77854aeeaa649bba27a8fcc9f35bf4feae4d..9cf6b1b3db77c0c5c72f98e4a80f7b9869d78380 100644 --- a/gazelle.spec +++ b/gazelle.spec @@ -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 - 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 - 1.0.2-60 - fix: when errno is ENOTCONN, ignore it - tools: fix script generate patchname wrong