From 6c057ca89a60cc1dfcd930a6448ff0950de54251 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 25 Apr 2026 21:46:35 +0300 Subject: [PATCH] fix BGP: delay up_cbk until connection initialized, fix send_table_request leak --- src/etcp.c | 2 ++ src/route_bgp.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/etcp.c b/src/etcp.c index 8fe3bcb9..a46c9be3 100644 --- a/src/etcp.c +++ b/src/etcp.c @@ -148,6 +148,7 @@ struct ETCP_CONN* etcp_connection_create(struct UTUN_INSTANCE* instance, char* n static void etcp_on_up(struct ETCP_CONN* etcp) { + if (!etcp->initialized) return; if (etcp->up_cbk) etcp->up_cbk(etcp, etcp->up_arg); } @@ -384,6 +385,7 @@ void etcp_conn_ready(struct ETCP_CONN* conn) { // Вызываем callback если установлен if (conn->ready_cbk) conn->ready_cbk(conn, conn->ready_arg); + if (conn->links_up) etcp_on_up(conn); } diff --git a/src/route_bgp.c b/src/route_bgp.c index 360183db..a953c53d 100644 --- a/src/route_bgp.c +++ b/src/route_bgp.c @@ -39,7 +39,10 @@ static void route_bgp_send_table_request(struct ROUTE_BGP* bgp, struct ETCP_CONN } e->dgram = (uint8_t*)req; e->len = sizeof(struct BGP_ROUTE_REQUEST); - etcp_send(conn, e); + if (etcp_send(conn, e) != 0) { + u_free(req); + queue_entry_free(e); + } } static void route_bgp_add_to_senders(struct ROUTE_BGP* bgp, struct ETCP_CONN* conn);