[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