From 63b6323e049ccab4ea5ecc716a2be61b8e6b4c3b Mon Sep 17 00:00:00 2001 From: Misaki Shioi <31817032+shioimm@users.noreply.github.com> Date: Wed, 29 Jan 2025 22:19:04 +0900 Subject: [PATCH] Ensure that memory is not freed before calling `free_fast_fallback_getaddrinfo_*` (#12661) Ensure that `getaddrinfo_entry` and `getaddrinfo_shared` exist before free them in the main thread. --- ext/socket/ipsocket.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c index 3e497a43be..ff35682486 100644 --- a/ext/socket/ipsocket.c +++ b/ext/socket/ipsocket.c @@ -1168,9 +1168,13 @@ fast_fallback_inetsock_cleanup(VALUE v) rb_nativethread_lock_unlock(&getaddrinfo_shared->lock); for (int i = 0; i < arg->family_size; i++) { - if (need_free[i]) free_fast_fallback_getaddrinfo_entry(&arg->getaddrinfo_entries[i]); + if (arg->getaddrinfo_entries[i] && need_free[i]) { + free_fast_fallback_getaddrinfo_entry(&arg->getaddrinfo_entries[i]); + } + } + if (getaddrinfo_shared && shared_need_free) { + free_fast_fallback_getaddrinfo_shared(&getaddrinfo_shared); } - if (shared_need_free) free_fast_fallback_getaddrinfo_shared(&getaddrinfo_shared); } int connection_attempt_fd;