diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2017-09-28 17:51:11 +0200 |
---|---|---|
committer | Lukas Slebodnik <lslebodn@redhat.com> | 2017-10-04 09:05:55 +0200 |
commit | 613a832d5bbf4c8174adbc1dcd881c59660cb0f1 (patch) | |
tree | 79ebf637a08fc624018518f81825ff21302304a7 | |
parent | 3e4fe6cc59419ce4c178e9ad31cd1069ab375e9b (diff) | |
download | sssd-613a832d5bbf4c8174adbc1dcd881c59660cb0f1.tar.gz sssd-613a832d5bbf4c8174adbc1dcd881c59660cb0f1.tar.xz sssd-613a832d5bbf4c8174adbc1dcd881c59660cb0f1.zip |
KCM: Add some forgotten NULL checks
Several memory allocations across the KCM codebase did not check their
result for NULL. This patch fixes that.
Reviewed-by: Fabiano FidĂȘncio <fidencio@redhat.com>
-rw-r--r-- | src/responder/kcm/kcmsrv_ccache.c | 4 | ||||
-rw-r--r-- | src/responder/kcm/kcmsrv_ccache_mem.c | 26 |
2 files changed, 28 insertions, 2 deletions
diff --git a/src/responder/kcm/kcmsrv_ccache.c b/src/responder/kcm/kcmsrv_ccache.c index 63dd1f85b..87a9bab73 100644 --- a/src/responder/kcm/kcmsrv_ccache.c +++ b/src/responder/kcm/kcmsrv_ccache.c @@ -1291,6 +1291,10 @@ struct tevent_req *kcm_ccdb_delete_cc_send(TALLOC_CTX *mem_ctx, state->db, state->client, state->uuid); + if (subreq == NULL) { + ret = ENOMEM; + goto immediate; + } tevent_req_set_callback(subreq, kcm_ccdb_delete_done, req); return req; diff --git a/src/responder/kcm/kcmsrv_ccache_mem.c b/src/responder/kcm/kcmsrv_ccache_mem.c index 1c4f3df8d..38bc2050d 100644 --- a/src/responder/kcm/kcmsrv_ccache_mem.c +++ b/src/responder/kcm/kcmsrv_ccache_mem.c @@ -405,6 +405,7 @@ static struct tevent_req *ccdb_mem_getbyuuid_send(TALLOC_CTX *mem_ctx, struct ccdb_mem_getbyuuid_state *state = NULL; struct ccdb_mem *memdb = talloc_get_type(db->db_handle, struct ccdb_mem); struct ccache_mem_wrap *ccwrap = NULL; + errno_t ret; req = tevent_req_create(mem_ctx, &state, struct ccdb_mem_getbyuuid_state); if (req == NULL) { @@ -414,9 +415,19 @@ static struct tevent_req *ccdb_mem_getbyuuid_send(TALLOC_CTX *mem_ctx, ccwrap = memdb_get_by_uuid(memdb, client, uuid); if (ccwrap != NULL) { state->cc = kcm_ccache_dup(state, ccwrap->cc); + if (state->cc == NULL) { + ret = ENOMEM; + goto immediate; + } } - tevent_req_done(req); + ret = EOK; +immediate: + if (ret == EOK) { + tevent_req_done(req); + } else { + tevent_req_error(req, ret); + } tevent_req_post(req, ev); return req; } @@ -447,6 +458,7 @@ static struct tevent_req *ccdb_mem_getbyname_send(TALLOC_CTX *mem_ctx, struct ccdb_mem_getbyname_state *state = NULL; struct ccache_mem_wrap *ccwrap = NULL; struct ccdb_mem *memdb = talloc_get_type(db->db_handle, struct ccdb_mem); + errno_t ret; req = tevent_req_create(mem_ctx, &state, struct ccdb_mem_getbyname_state); if (req == NULL) { @@ -456,9 +468,19 @@ static struct tevent_req *ccdb_mem_getbyname_send(TALLOC_CTX *mem_ctx, ccwrap = memdb_get_by_name(memdb, client, name); if (ccwrap != NULL) { state->cc = kcm_ccache_dup(state, ccwrap->cc); + if (state->cc == NULL) { + ret = ENOMEM; + goto immediate; + } } - tevent_req_done(req); + ret = EOK; +immediate: + if (ret == EOK) { + tevent_req_done(req); + } else { + tevent_req_error(req, ret); + } tevent_req_post(req, ev); return req; } |