summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Reichl <preichl@redhat.com>2014-04-25 14:42:39 +0100
committerJakub Hrozek <jhrozek@redhat.com>2014-05-13 17:04:41 +0200
commit25193cfe110b328b428cde9641400f7dc999416e (patch)
treed472ac30bf80b4e555b5ecd035b8fb4723487fa4
parent400c06ebd99bfa447d0f88228320224291c862e0 (diff)
downloadsssd-25193cfe110b328b428cde9641400f7dc999416e.tar.gz
sssd-25193cfe110b328b428cde9641400f7dc999416e.tar.xz
sssd-25193cfe110b328b428cde9641400f7dc999416e.zip
AD Provider: bugfix use-after-free
Resolves: https://fedorahosted.org/sssd/ticket/2322 Reviewed-by: Sumit Bose <sbose@redhat.com> (cherry picked from commit ed61bfc5184d9c7a46d17681a22a1abb64423708)
-rw-r--r--src/providers/data_provider_be.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index 37b687f25..f85c63065 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -210,7 +210,8 @@ void be_req_terminate(struct be_req *be_req,
void be_terminate_domain_requests(struct be_ctx *be_ctx,
const char *domain)
{
- struct be_req *be_req = NULL;
+ struct be_req *be_req;
+ struct be_req *next_be_req;
DEBUG(SSSDBG_TRACE_FUNC, ("Terminating requests for domain [%s]\n",
domain));
@@ -220,11 +221,15 @@ void be_terminate_domain_requests(struct be_ctx *be_ctx,
return;
}
- DLIST_FOR_EACH(be_req, be_ctx->active_requests) {
+ be_req = be_ctx->active_requests;
+ while (be_req) {
+ /* save pointer to next request in case be_req will be freed */
+ next_be_req = be_req->next;
if (strcmp(domain, be_req->domain->name) == 0) {
be_req_terminate(be_req, DP_ERR_FATAL, ERR_DOMAIN_NOT_FOUND,
sss_strerror(ERR_DOMAIN_NOT_FOUND));
}
+ be_req = next_be_req;
}
}