[SSSD] [PATCH] Don't use server after SRV data collapsed

Jakub Hrozek jhrozek at redhat.com
Wed Aug 8 09:06:13 UTC 2012


Collapsing servers previsouly expanded from a SRV query leads to a small
window where we use memory that was already freed.

I originally suspected this was the cause for the failover crash we've
been seeing lately, but I was wrong. I'll keep looking.
-------------- next part --------------
>From e4f52f9b24126ce93b54e35d84bf3b6769e6dce4 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek at redhat.com>
Date: Tue, 7 Aug 2012 15:32:05 +0200
Subject: [PATCH] Don't use server after SRV data collapsed

---
 src/providers/fail_over.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/providers/fail_over.c b/src/providers/fail_over.c
index 6a55c5f81d888c5b3c2a3dfa0480e5c285a43393..ff12047067e1c317c8b61fdd165d658ce1cac58f 100644
--- a/src/providers/fail_over.c
+++ b/src/providers/fail_over.c
@@ -1066,17 +1066,20 @@ resolve_srv_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
     state->ev = ev;
     state->resolv = resolv;
     state->fo_ctx = ctx;
-    state->meta = server;
+    state->meta = server->srv_data->meta;
 
     status = get_srv_data_status(server->srv_data);
-    DEBUG(6, ("The status of SRV lookup is %s\n",
-              str_srv_data_status(status)));
+    DEBUG(SSSDBG_FUNC_DATA, ("The status of SRV lookup is %s\n",
+          str_srv_data_status(status)));
     switch(status) {
     case SRV_EXPIRED: /* Need a refresh */
         state->meta = collapse_srv_lookup(server);
-        /* FALLTHROUGH */
+        /* FALLTHROUGH.
+         * "server" might be invalid now if the SRV
+         * query collapsed
+         * */
     case SRV_NEUTRAL: /* Request SRV lookup */
-        if (server->srv_data->dns_domain == NULL) {
+        if (state->meta->srv_data->dns_domain == NULL) {
             /* we need to look up our DNS domain first */
             subreq = resolve_get_domain_send(state, ev, ctx, resolv);
             if (subreq == NULL) {
-- 
1.7.11.2



More information about the sssd-devel mailing list