summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2017-09-28 17:51:11 +0200
committerLukas Slebodnik <lslebodn@redhat.com>2017-10-04 09:05:55 +0200
commit613a832d5bbf4c8174adbc1dcd881c59660cb0f1 (patch)
tree79ebf637a08fc624018518f81825ff21302304a7
parent3e4fe6cc59419ce4c178e9ad31cd1069ab375e9b (diff)
downloadsssd-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.c4
-rw-r--r--src/responder/kcm/kcmsrv_ccache_mem.c26
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;
}