diff options
author | Pavel Březina <pbrezina@redhat.com> | 2012-10-02 15:22:32 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2012-10-11 12:24:54 +0200 |
commit | 20ae5925d2963937dfc6a66017c05bb018cedd3f (patch) | |
tree | 4bf2d70afa531e0484efd1c476020c0a299e9c2f /src/responder/common/responder_dp.c | |
parent | 6b45f632759293fc9f2a28317fae2e224ac53020 (diff) | |
download | sssd-20ae5925d2963937dfc6a66017c05bb018cedd3f.tar.gz sssd-20ae5925d2963937dfc6a66017c05bb018cedd3f.tar.bz2 sssd-20ae5925d2963937dfc6a66017c05bb018cedd3f.zip |
do not call dp callbacks when responder is shutting down
https://fedorahosted.org/sssd/ticket/1514
We were experiencing crash duting responder shut down. This happened
when there were some unresolved dp request during the shut down.
The memory hierarchy is main_ctx->specific_ctx->rctx, where
specific_ctx may be one of the pam, nss, sudo, etc. contexts.
If we try to call dp request callback as a result of responder
termination, the specific context is already semi freed, which may
cause crash.
Diffstat (limited to 'src/responder/common/responder_dp.c')
-rw-r--r-- | src/responder/common/responder_dp.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/responder/common/responder_dp.c b/src/responder/common/responder_dp.c index ca9cb834..34fc9f34 100644 --- a/src/responder/common/responder_dp.c +++ b/src/responder/common/responder_dp.c @@ -76,6 +76,14 @@ static int sss_dp_req_destructor(void *ptr) sdp_req->pending_reply = NULL; } + /* Do not call callbacks if the responder is shutting down, because + * the top level responder context (pam_ctx, sudo_ctx, ...) may be + * already semi-freed and we may end up accessing freed memory. + */ + if (sdp_req->rctx->shutting_down) { + return 0; + } + /* If there are callbacks that haven't been invoked, return * an error now. */ |