Hi,

this is a patch for issue #775.

-- 
Jérôme
>From 68e8b71c50d0805faf5facba587f1c8c3f1760b7 Mon Sep 17 00:00:00 2001
From: Jerome Magnin <jer...@layaute.net>
Date: Tue, 28 Jul 2020 13:38:22 +0200
Subject: [PATCH] BUG/MAJOR: dns: fix null pointer dereference in
 snr_update_srv_status

Since commit 13a9232eb ("MEDIUM: dns: use Additional records from SRV
responses"), a struct server can have a NULL dns_requester->resolution,
when SRV records are used and DNS answers contain an Additional section.

This is a problem when we call snr_update_srv_status() because it does
not check that resolution is NULL, and dereferences it. This patch
simply adds a test for resolution being NULL. When that happens, it means
we are using SRV records with Additional records, and an entry was removed.

This should fix issue #775.
This should be backported to 2.2.
---
 src/server.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/server.c b/src/server.c
index a622e22bd..918294b2f 100644
--- a/src/server.c
+++ b/src/server.c
@@ -3731,6 +3731,15 @@ int snr_update_srv_status(struct server *s, int 
has_no_ip)
        struct dns_resolution *resolution = s->dns_requester->resolution;
        int exp;
 
+       /* If resolution is NULL we're dealing with SRV records Additional 
records */
+       if (resolution == NULL) {
+               if (s->next_admin & SRV_ADMF_RMAINT)
+                       return 1;
+
+               srv_set_admin_flag(s, SRV_ADMF_RMAINT, "entry removed from SRV 
record");
+               return 0;
+       }
+
        switch (resolution->status) {
                case RSLV_STATUS_NONE:
                        /* status when HAProxy has just (re)started.
-- 
2.27.0

Reply via email to