|
|
3280a9 |
From 05b66529117d1cd85a636ab7d8fc84abdec814de Mon Sep 17 00:00:00 2001
|
|
|
3280a9 |
From: William Brown <william@blackhats.net.au>
|
|
|
3280a9 |
Date: Thu, 12 Nov 2020 13:04:21 +1000
|
|
|
3280a9 |
Subject: [PATCH] Issue 4428 - BUG Paged Results with critical false causes
|
|
|
3280a9 |
sigsegv in chaining
|
|
|
3280a9 |
|
|
|
3280a9 |
Bug Description: When a paged search through chaining backend is
|
|
|
3280a9 |
received with a false criticality (such as SSSD), chaining backend
|
|
|
3280a9 |
will sigsegv due to a null context.
|
|
|
3280a9 |
|
|
|
3280a9 |
Fix Description: When a NULL ctx is recieved to be freed, this is
|
|
|
3280a9 |
as paged results have finished being sent, so we check the NULL
|
|
|
3280a9 |
ctx and move on.
|
|
|
3280a9 |
|
|
|
3280a9 |
fixes: #4428
|
|
|
3280a9 |
|
|
|
3280a9 |
Author: William Brown <william@blackhats.net.au>
|
|
|
3280a9 |
|
|
|
3280a9 |
Review by: @droideck, @mreynolds389
|
|
|
3280a9 |
---
|
|
|
3280a9 |
ldap/servers/plugins/chainingdb/cb_search.c | 6 ++++++
|
|
|
3280a9 |
ldap/servers/plugins/chainingdb/cb_utils.c | 4 ++++
|
|
|
3280a9 |
2 files changed, 10 insertions(+)
|
|
|
3280a9 |
|
|
|
3280a9 |
diff --git a/ldap/servers/plugins/chainingdb/cb_search.c b/ldap/servers/plugins/chainingdb/cb_search.c
|
|
|
3280a9 |
index 69d23a6b5..d47cbc8e4 100644
|
|
|
3280a9 |
--- a/ldap/servers/plugins/chainingdb/cb_search.c
|
|
|
3280a9 |
+++ b/ldap/servers/plugins/chainingdb/cb_search.c
|
|
|
3280a9 |
@@ -740,6 +740,12 @@ chaining_back_search_results_release(void **sr)
|
|
|
3280a9 |
|
|
|
3280a9 |
slapi_log_err(SLAPI_LOG_PLUGIN, CB_PLUGIN_SUBSYSTEM,
|
|
|
3280a9 |
"chaining_back_search_results_release\n");
|
|
|
3280a9 |
+ if (ctx == NULL) {
|
|
|
3280a9 |
+ /* The paged search is already complete, just return */
|
|
|
3280a9 |
+ /* Could we have a ctx state flag instead? */
|
|
|
3280a9 |
+ return;
|
|
|
3280a9 |
+ }
|
|
|
3280a9 |
+
|
|
|
3280a9 |
if (ctx->readahead != ctx->tobefreed) {
|
|
|
3280a9 |
slapi_entry_free(ctx->readahead);
|
|
|
3280a9 |
}
|
|
|
3280a9 |
diff --git a/ldap/servers/plugins/chainingdb/cb_utils.c b/ldap/servers/plugins/chainingdb/cb_utils.c
|
|
|
3280a9 |
index dfd5dd92c..d52fd25a6 100644
|
|
|
3280a9 |
--- a/ldap/servers/plugins/chainingdb/cb_utils.c
|
|
|
3280a9 |
+++ b/ldap/servers/plugins/chainingdb/cb_utils.c
|
|
|
3280a9 |
@@ -279,7 +279,11 @@ cb_add_suffix(cb_backend_instance *inst, struct berval **bvals, int apply_mod, c
|
|
|
3280a9 |
return LDAP_SUCCESS;
|
|
|
3280a9 |
}
|
|
|
3280a9 |
|
|
|
3280a9 |
+#ifdef DEBUG
|
|
|
3280a9 |
+static int debug_on = 1;
|
|
|
3280a9 |
+#else
|
|
|
3280a9 |
static int debug_on = 0;
|
|
|
3280a9 |
+#endif
|
|
|
3280a9 |
|
|
|
3280a9 |
int
|
|
|
3280a9 |
cb_debug_on()
|
|
|
3280a9 |
--
|
|
|
3280a9 |
2.26.2
|
|
|
3280a9 |
|