|
|
9cb92d |
From 25193cfe110b328b428cde9641400f7dc999416e Mon Sep 17 00:00:00 2001
|
|
|
9cb92d |
From: Pavel Reichl <preichl@redhat.com>
|
|
|
9cb92d |
Date: Fri, 25 Apr 2014 14:42:39 +0100
|
|
|
9cb92d |
Subject: [PATCH 124/124] AD Provider: bugfix use-after-free
|
|
|
9cb92d |
|
|
|
9cb92d |
Resolves:
|
|
|
9cb92d |
https://fedorahosted.org/sssd/ticket/2322
|
|
|
9cb92d |
|
|
|
9cb92d |
Reviewed-by: Sumit Bose <sbose@redhat.com>
|
|
|
9cb92d |
(cherry picked from commit ed61bfc5184d9c7a46d17681a22a1abb64423708)
|
|
|
9cb92d |
---
|
|
|
9cb92d |
src/providers/data_provider_be.c | 9 +++++++--
|
|
|
9cb92d |
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
9cb92d |
|
|
|
9cb92d |
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
|
|
|
9cb92d |
index 37b687f25810447c08c6e0c6e8da4f64c99a5f5f..f85c63065252b24d4eeec0d2671ab0a1a16d4b9a 100644
|
|
|
9cb92d |
--- a/src/providers/data_provider_be.c
|
|
|
9cb92d |
+++ b/src/providers/data_provider_be.c
|
|
|
9cb92d |
@@ -210,7 +210,8 @@ void be_req_terminate(struct be_req *be_req,
|
|
|
9cb92d |
void be_terminate_domain_requests(struct be_ctx *be_ctx,
|
|
|
9cb92d |
const char *domain)
|
|
|
9cb92d |
{
|
|
|
9cb92d |
- struct be_req *be_req = NULL;
|
|
|
9cb92d |
+ struct be_req *be_req;
|
|
|
9cb92d |
+ struct be_req *next_be_req;
|
|
|
9cb92d |
|
|
|
9cb92d |
DEBUG(SSSDBG_TRACE_FUNC, ("Terminating requests for domain [%s]\n",
|
|
|
9cb92d |
domain));
|
|
|
9cb92d |
@@ -220,11 +221,15 @@ void be_terminate_domain_requests(struct be_ctx *be_ctx,
|
|
|
9cb92d |
return;
|
|
|
9cb92d |
}
|
|
|
9cb92d |
|
|
|
9cb92d |
- DLIST_FOR_EACH(be_req, be_ctx->active_requests) {
|
|
|
9cb92d |
+ be_req = be_ctx->active_requests;
|
|
|
9cb92d |
+ while (be_req) {
|
|
|
9cb92d |
+ /* save pointer to next request in case be_req will be freed */
|
|
|
9cb92d |
+ next_be_req = be_req->next;
|
|
|
9cb92d |
if (strcmp(domain, be_req->domain->name) == 0) {
|
|
|
9cb92d |
be_req_terminate(be_req, DP_ERR_FATAL, ERR_DOMAIN_NOT_FOUND,
|
|
|
9cb92d |
sss_strerror(ERR_DOMAIN_NOT_FOUND));
|
|
|
9cb92d |
}
|
|
|
9cb92d |
+ be_req = next_be_req;
|
|
|
9cb92d |
}
|
|
|
9cb92d |
}
|
|
|
9cb92d |
|
|
|
9cb92d |
--
|
|
|
9cb92d |
1.9.0
|
|
|
9cb92d |
|