route_connectivity: фикс UAF при удалении узла с влётными пробами; отмена TCP-пингов при teardown
- topo_nodeq_remove_node: единый хелпер удаления nq (cancel проб + free paths/subnets + remove + free), заменяет все free-сайты - route_connectivity_cancel_all: итерация по всем группам + зануление ctx->nq + отмена standby-defer - etcp_send_tcp_ping: out_cli — хендл stcp_client для досрочной отмены; conn_probe_ctx.tcp_cli - conn_mgr: cand_tcp_pings[] — отмена влётных candidate TCP-пингов в conn_mgr_destroy
This commit is contained in:
1 parent
3f7b4351cd
commit
08e8b2f1cc
12 files changed
+91
-55
No files matched your search
@@ -69,7 +69,7 @@ int main(void) {
|
||||
struct sockaddr_in *sin = (struct sockaddr_in *)&addr;
|
||||
sin->sin_family = AF_INET; sin->sin_addr.s_addr = htonl(0x7f000001); sin->sin_port = htons(port);
|
||||
|
||||
int rc = etcp_send_tcp_ping(cli, srv_pub, &addr, 2000, ping_cb, NULL);
|
||||
int rc = etcp_send_tcp_ping(cli, srv_pub, &addr, 2000, ping_cb, NULL, NULL);
|
||||
if (rc != 0) { DEBUG_ERROR(DEBUG_CATEGORY_GENERAL, "etcp_send_tcp_ping failed rc=%d", rc); return 1; }
|
||||
|
||||
int ticks = 0;
|
||||
@@ -82,7 +82,7 @@ int main(void) {
|
||||
struct sockaddr_storage bad_addr; memset(&bad_addr, 0, sizeof(bad_addr));
|
||||
struct sockaddr_in *bsin = (struct sockaddr_in *)&bad_addr;
|
||||
bsin->sin_family = AF_INET; bsin->sin_addr.s_addr = htonl(0x7f000001); bsin->sin_port = htons(port + 5000);
|
||||
rc = etcp_send_tcp_ping(cli, srv_pub, &bad_addr, 1000, ping_cb, NULL);
|
||||
rc = etcp_send_tcp_ping(cli, srv_pub, &bad_addr, 1000, ping_cb, NULL, NULL);
|
||||
ticks = 0;
|
||||
while (ping_ok < 0 && ticks < 3000) { uasync_poll(ua, 10); ticks++; }
|
||||
if (ping_ok != 0) { DEBUG_ERROR(DEBUG_CATEGORY_GENERAL, "=== FAILED (failure path): success=%d rtt=%u rc=%d ===", ping_ok, ping_rtt, rc); return 1; }
|
||||
|
||||
Reference in new issue
Block a user