diff --git a/src/dns.c b/src/dns.c
index b99c1d98d72e676197fd47956ea6171549197668..3b7c305047bcf4393161ad0e9beec17299dcd1d1 100644
--- a/src/dns.c
+++ b/src/dns.c
@@ -513,6 +513,7 @@ int dns_receive_response(int sockfd, struct sockaddr_in *server_addr, dns_messag
     if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0)
     {
         perror("Error setting socket receive timeout");
+        free(buffer);
         return -1;
     }
 
@@ -526,11 +527,14 @@ int dns_receive_response(int sockfd, struct sockaddr_in *server_addr, dns_messag
         } else {
             perror("Failed receiving DNS response.");
         }
+        free(buffer);
         return -1;
     }
 
     // DNS response was received successfully, parse it
     *dns_message = dns_parse_message(buffer);
+
+    free(buffer);
     return 0;
 }