Blob Blame History Raw
From ecbc3329788de254346d7ea84770e09cc22dbc9c Mon Sep 17 00:00:00 2001
From: Alexey Tikhonov <atikhono@redhat.com>
Date: Mon, 18 Jul 2022 21:59:03 +0200
Subject: [PATCH] RESPONDER: don't execute sss_dp_callback_destructor() if
 responder is being shut down.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Resolves: https://github.com/SSSD/sssd/issues/6270

Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Reviewed-by: Tomáš Halman <thalman@redhat.com>
---
 src/responder/common/responder_dp.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/responder/common/responder_dp.c b/src/responder/common/responder_dp.c
index a49b31528..0cc5c5424 100644
--- a/src/responder/common/responder_dp.c
+++ b/src/responder/common/responder_dp.c
@@ -35,6 +35,7 @@ struct sss_dp_callback {
     struct sss_dp_callback *prev;
     struct sss_dp_callback *next;
 
+    struct resp_ctx *rctx;
     struct tevent_req *req;
     struct sss_dp_req *sdp_req;
 };
@@ -58,9 +59,14 @@ static int sss_dp_callback_destructor(void *ptr)
     struct sss_dp_callback *cb =
             talloc_get_type(ptr, struct sss_dp_callback);
 
+    /* `sdp_req` might be already freed if responder is being shut down */
+    if (cb->rctx->shutting_down) {
+        return 0;
+    }
+
     DLIST_REMOVE(cb->sdp_req->cb_list, cb);
 
-    return EOK;
+    return 0;
 }
 
 static int sss_dp_req_destructor(void *ptr)
@@ -396,6 +402,7 @@ sss_dp_issue_request(TALLOC_CTX *mem_ctx, struct resp_ctx *rctx,
         goto fail;
     }
 
+    cb->rctx = rctx;
     cb->req = nreq;
     cb->sdp_req = sdp_req;
 
-- 
2.37.3