ehlo,

attached patch fixes coverity issue.

src/providers/ipa/ipa_auth.c:
311static void ipa_pam_auth_handler_connect_done(struct tevent_req *subreq)
312{
313    struct ipa_pam_auth_handler_state *state;
314    struct tevent_req *req;
   1. var_decl: Declaring variable sh without initializer.
315    struct sdap_handle *sh;
316    const char *attrs[] = {SYSDB_ORIG_DN, NULL};
317    struct ldb_message *msg;
318    const char *dn;
319    int timeout;
320    errno_t ret;
321
322    req = tevent_req_callback_data(subreq, struct tevent_req);
323    state = tevent_req_data(req, struct ipa_pam_auth_handler_state);
324
325    state->pd->pam_status = PAM_SYSTEM_ERR;
326
   CID 13699 (#1 of 1): Uninitialized pointer read (UNINIT)2. 
uninit_use_in_call: Using uninitialized value sh when calling 
sdap_cli_connect_recv. [show details]
327    ret = sdap_cli_connect_recv(subreq, state, NULL, &sh, NULL);

src/providers/ldap/sdap_async_connection.c:
2026int sdap_cli_connect_recv(struct tevent_req *req,
2027                          TALLOC_CTX *memctx,
2028                          bool *can_retry,
2029                          struct sdap_handle **gsh,
2030                          struct sdap_server_opts **srv_opts)
2031{
2032    struct sdap_cli_connect_state *state = tevent_req_data(req,
2033                                             struct sdap_cli_connect_state);
2034    enum tevent_req_state tstate;
2035    uint64_t err_uint64;
2036    int err;
2037
    1. Condition can_retry, taking true branch
2038    if (can_retry) {
2039        *can_retry = true;
2040    }
    2. Condition tevent_req_is_error(req, &tstate, &err_uint64), taking false 
branch
2041    if (tevent_req_is_error(req, &tstate, &err_uint64)) {
2042        /* mark the server as bad if connection failed */
2043        if (state->srv) {
2044            DEBUG(SSSDBG_OP_FAILURE, "Unable to establish connection "
2045                  "[%"PRIu64"]: %s\n", err_uint64, 
sss_strerror(err_uint64));
2046
2047            be_fo_set_port_status(state->be, state->service->name,
2048                                  state->srv, PORT_NOT_WORKING);
2049        } else {
2050            if (can_retry) {
2051                *can_retry = false;
2052            }
2053        }
2054
2055        if (tstate == TEVENT_REQ_USER_ERROR) {
2056            err = (int)err_uint64;
2057            if (err == EOK) {
2058                return EINVAL;
2059            }
2060            return err;
2061        }
2062        return EIO;
    3. Condition state->srv, taking true branch
2063    } else if (state->srv) {
    4. Condition debug_level & __debug_macro_level, taking true branch
2064        DEBUG(SSSDBG_TRACE_FUNC, "Connection established.\n");
2065
2066        be_fo_set_port_status(state->be, state->service->name,
2067                              state->srv, PORT_WORKING);
2068    }
2069
    5. Condition gsh, taking true branch
2070    if (gsh) {
    6. read_parm: Reading a parameter value.
2071        if (*gsh) {
2072            talloc_zfree(*gsh);
2073        }
2074        *gsh = talloc_steal(memctx, state->sh);
2075        if (!*gsh) {
2076            return ENOMEM;
2077        }


LS
>From 0077086cad1b0121241f151a4b3117c3893c44aa Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lsleb...@redhat.com>
Date: Mon, 4 Jul 2016 09:53:06 +0200
Subject: [PATCH] IPA: Fix uninitialized pointer read (UNINIT)

We try to release sdap_handle in the function sdap_cli_connect_recv.
Therefore we might try to release memory which does not belong to us
due to uninitialized pointer.

2070    if (gsh) {
6. read_parm: Reading a parameter value.
2071        if (*gsh) {
2072            talloc_zfree(*gsh);
2073        }
---
 src/providers/ipa/ipa_auth.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/providers/ipa/ipa_auth.c b/src/providers/ipa/ipa_auth.c
index 
ad0a89bfeac315532dea25a981d409e9eef46081..5fee03baefebcc9211b52772c41e2623471e5248
 100644
--- a/src/providers/ipa/ipa_auth.c
+++ b/src/providers/ipa/ipa_auth.c
@@ -312,7 +312,7 @@ static void ipa_pam_auth_handler_connect_done(struct 
tevent_req *subreq)
 {
     struct ipa_pam_auth_handler_state *state;
     struct tevent_req *req;
-    struct sdap_handle *sh;
+    struct sdap_handle *sh = NULL;
     const char *attrs[] = {SYSDB_ORIG_DN, NULL};
     struct ldb_message *msg;
     const char *dn;
-- 
2.7.4

_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org

Reply via email to