From: Stefan Metzmacher Date: Wed, 9 Aug 2023 10:42:43 +0000 (+0200) Subject: librpc/rpc: apply some code cleanup and error checks to dcesrv_mgmt.c X-Git-Tag: talloc-2.4.2~1266 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6cb12d3955d3c7f216c79b081f5431ec9f4c14ce;p=thirdparty%2Fsamba.git librpc/rpc: apply some code cleanup and error checks to dcesrv_mgmt.c Signed-off-by: Stefan Metzmacher Reviewed-by: Andrew Bartlett --- diff --git a/librpc/rpc/dcesrv_mgmt.c b/librpc/rpc/dcesrv_mgmt.c index d75f08b56e6..5e52a4a1217 100644 --- a/librpc/rpc/dcesrv_mgmt.c +++ b/librpc/rpc/dcesrv_mgmt.c @@ -49,17 +49,27 @@ static WERROR dcesrv_mgmt_inq_if_ids(struct dcesrv_call_state *dce_call, TALLOC_ struct mgmt_inq_if_ids *r) { const struct dcesrv_endpoint *ep = dce_call->conn->endpoint; - struct dcesrv_if_list *l; - struct rpc_if_id_vector_t *vector; + struct dcesrv_if_list *l = NULL; + struct rpc_if_id_vector_t *vector = NULL; + + vector = talloc(mem_ctx, struct rpc_if_id_vector_t); + if (vector == NULL) { + return WERR_NOT_ENOUGH_MEMORY; + } - vector = *r->out.if_id_vector = talloc(mem_ctx, struct rpc_if_id_vector_t); vector->count = 0; vector->if_id = NULL; + for (l = ep->interface_list; l; l = l->next) { vector->count++; - vector->if_id = talloc_realloc(mem_ctx, vector->if_id, struct ndr_syntax_id_p, vector->count); + vector->if_id = talloc_realloc(vector, vector->if_id, struct ndr_syntax_id_p, vector->count); + if (vector->if_id == NULL) { + return WERR_NOT_ENOUGH_MEMORY; + } vector->if_id[vector->count-1].id = &l->iface->syntax_id; } + + *r->out.if_id_vector = vector; return WERR_OK; } @@ -73,8 +83,13 @@ static WERROR dcesrv_mgmt_inq_stats(struct dcesrv_call_state *dce_call, TALLOC_C if (r->in.max_count != MGMT_STATS_ARRAY_MAX_SIZE) return WERR_NOT_SUPPORTED; + r->out.statistics->statistics = talloc_zero_array(mem_ctx, + uint32_t, + r->in.max_count); + if (r->out.statistics->statistics == NULL) { + return WERR_NOT_ENOUGH_MEMORY; + } r->out.statistics->count = r->in.max_count; - r->out.statistics->statistics = talloc_array(mem_ctx, uint32_t, r->in.max_count); /* FIXME */ r->out.statistics->statistics[MGMT_STATS_CALLS_IN] = 0; r->out.statistics->statistics[MGMT_STATS_CALLS_OUT] = 0;