commit 920edd3: [Minor] Plug memory leak when rescheduling requests over TCP

Vsevolod Stakhov vsevolod at highsecure.ru
Sun Mar 20 12:42:04 UTC 2022


Author: Vsevolod Stakhov
Date: 2022-03-20 12:36:06 +0000
URL: https://github.com/rspamd/rspamd/commit/920edd39c12de0e69e54aa0bcde81e6e8d814c22 (HEAD -> master)

[Minor] Plug memory leak when rescheduling requests over TCP

---
 contrib/librdns/resolver.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/contrib/librdns/resolver.c b/contrib/librdns/resolver.c
index c12180ec1..cb9824ed4 100644
--- a/contrib/librdns/resolver.c
+++ b/contrib/librdns/resolver.c
@@ -554,11 +554,12 @@ rdns_process_udp_read (int fd, struct rdns_io_channel *ioc)
 			if (!(rep->flags & RDNS_TRUNCATED)) {
 				req->state = RDNS_REQUEST_REPLIED;
 				req->func(rep, req->arg);
+				/* This will free reply as well */
 				REF_RELEASE (req);
 			}
 			else {
-				rdns_debug("truncated UDP reply for %s", req->requested_names[0].name);
 				if (req->io->srv->tcp_io_cnt > 0) {
+					rdns_debug("truncated UDP reply for %s; schedule over TCP", req->requested_names[0].name);
 					/* Reschedule via TCP */
 					if (!rdns_reschedule_req_over_tcp (req, req->io->srv)) {
 						/* Use truncated reply as we have no other options */
@@ -566,6 +567,18 @@ rdns_process_udp_read (int fd, struct rdns_io_channel *ioc)
 						req->func(rep, req->arg);
 						REF_RELEASE (req);
 					}
+					else {
+						/* Remove and free the truncated reply, as we have rescheduled the reply */
+						req->reply = NULL;
+						rdns_reply_free(rep);
+					}
+				}
+				else {
+					/* No TCP channels available */
+					req->state = RDNS_REQUEST_REPLIED;
+					req->func(rep, req->arg);
+					/* This will free reply as well */
+					REF_RELEASE (req);
 				}
 			}
 		}


More information about the Commits mailing list