sssd/0023-sbus-defer-notification-callbacks.patch
Alexey Tikhonov 4e0e69dcf7 Resolves: RHEL-143731 - Crash in 'sss_client/autofs/sss_autofs.c' [rhel-8.10.z]
Resolves: RHEL-133476 - 'sssd_nss' hangs when looking up an object by ID that has expired cache entry and filtered out by name [rhel-8.10.z]
Resolves: RHEL-114350 - Frequent crashes of the SSSD process (sssd_pac), leading to the termination of the AD trusted domain subprocess by the watchdog [rhel-8.10.z]
Resolves: RHEL-143719 - SSSD unable to enumerate LDAP groups with 'getent group' & 'getent group -s sss ' if LDAP server contains any group with # character in their names [rhel-8.10.z]
2026-01-26 10:15:04 +01:00

58 lines
1.9 KiB
Diff

From 86d8d0d1f6653e8d5d8f4d1988a84256a1f429d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Fri, 14 Nov 2025 14:29:43 +0100
Subject: [PATCH 23/24] sbus: defer notification callbacks
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Otherwise, it is possible to incorrectly chain nested requests since the
chain id is still present in the hash table.
Resolves: https://github.com/SSSD/sssd/issues/8194
Reviewed-by: Alexey Tikhonov <atikhono@redhat.com>
Reviewed-by: Tomáš Halman <thalman@redhat.com>
(cherry picked from commit d6ea55552ec1eeda4a58336bba4a2873b0568b65)
---
src/sbus/request/sbus_request_hash.c | 4 ++++
src/sbus/sbus_private.h | 1 +
2 files changed, 5 insertions(+)
diff --git a/src/sbus/request/sbus_request_hash.c b/src/sbus/request/sbus_request_hash.c
index 0ddad03a8..28d5df81e 100644
--- a/src/sbus/request/sbus_request_hash.c
+++ b/src/sbus/request/sbus_request_hash.c
@@ -147,6 +147,7 @@ sbus_requests_add(hash_table_t *table,
goto done;
}
+ item->ev = conn->ev;
item->req = req;
item->conn = conn;
item->is_dbus = is_dbus;
@@ -283,6 +284,9 @@ sbus_requests_finish(struct sbus_request_list *item,
return;
}
+ /* Defer callback so all requests are notified before callbacks are run. */
+ tevent_req_defer_callback(item->req, item->ev);
+
if (error != EOK) {
tevent_req_error(item->req, error);
return;
diff --git a/src/sbus/sbus_private.h b/src/sbus/sbus_private.h
index eef397b86..d65a29e21 100644
--- a/src/sbus/sbus_private.h
+++ b/src/sbus/sbus_private.h
@@ -430,6 +430,7 @@ sbus_server_filter(DBusConnection *dbus_conn,
struct sbus_request_spy;
struct sbus_request_list {
+ struct tevent_context *ev;
struct tevent_req *req;
struct sbus_connection *conn;
--
2.52.0