From cbae6855320b53f3f2bdc0e11c5a9c8eb84daf87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20L=C3=B3pez?= Date: Mon, 18 Dec 2023 11:37:29 +0100 Subject: [PATCH] KCM: Fix a memory "leak" When an operation is processed, a buffer is allocated for the reply and its parent is the client context (struct cli_ctx). This buffer is not explicitly freed but it is released when the client context is freed. With each operation a new buffer is allocated and the previous one gets "lost." This is not an actual leak because the lost buffers are released by talloc once the client context is freed, when the connection is closed. But on long-lived connections this can consume a large amount of memory before the connection is closed. To solve this, the request context (struct kcm_req_ctx) is the new parent of the buffer. The request is freed as soon as the operation is completed and no buffer gets lost. Resolves: https://github.com/SSSD/sssd/issues/7072 Reviewed-by: Iker Pedrosa Reviewed-by: Sumit Bose --- src/responder/kcm/kcmsrv_cmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/responder/kcm/kcmsrv_cmd.c b/src/responder/kcm/kcmsrv_cmd.c index 1f60d1a14..9c37e3cf0 100644 --- a/src/responder/kcm/kcmsrv_cmd.c +++ b/src/responder/kcm/kcmsrv_cmd.c @@ -350,7 +350,7 @@ static void kcm_send_reply(struct kcm_req_ctx *req_ctx) cctx = req_ctx->cctx; - ret = kcm_output_construct(cctx, &req_ctx->op_io, &req_ctx->repbuf); + ret = kcm_output_construct(req_ctx, &req_ctx->op_io, &req_ctx->repbuf); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Cannot construct the reply buffer, terminating client\n"); -- 2.33.0