From b54cd7caf6b73b36b68fcefc0cad39a626690398 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Thu, 16 Jun 2016 17:40:50 +0200 Subject: Downcast to errno_t after tevent_req_is_error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Functions tevent_req_is_error and _tevent_req_error use type uint64_t for error code. SSSD uses errno_t which is an alias for int. Therefore complier assumes that macro TEVENT_REQ_RETURN_ON_ERROR can return 0 due to implicit down casting from uint64_t -> int. This patch makes down casting explicit and returns EINVAL if result of downcasting is 0. Reviewed-by: Pavel Březina --- src/responder/common/responder_dp.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/responder') diff --git a/src/responder/common/responder_dp.c b/src/responder/common/responder_dp.c index f53c7d232..fed47a068 100644 --- a/src/responder/common/responder_dp.c +++ b/src/responder/common/responder_dp.c @@ -397,14 +397,20 @@ sss_dp_req_recv(TALLOC_CTX *mem_ctx, tevent_req_data(sidereq, struct sss_dp_req_state); enum tevent_req_state TRROEstate; - uint64_t TRROEerr; + uint64_t TRROEuint64; + errno_t TRROEerr; *dp_err = state->dp_err; *dp_ret = state->dp_ret; *err_msg = talloc_steal(mem_ctx, state->err_msg); - if (tevent_req_is_error(sidereq, &TRROEstate, &TRROEerr)) { + if (tevent_req_is_error(sidereq, &TRROEstate, &TRROEuint64)) { + TRROEerr = (errno_t)TRROEuint64; + if (TRROEstate == TEVENT_REQ_USER_ERROR) { + if (TRROEerr == 0) { + return ERR_INTERNAL; + } *dp_err = DP_ERR_FATAL; *dp_ret = TRROEerr; } else { -- cgit