45 lines
1.7 KiB
Diff
45 lines
1.7 KiB
Diff
From cbae6855320b53f3f2bdc0e11c5a9c8eb84daf87 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Alejandro=20L=C3=B3pez?= <allopez@redhat.com>
|
|
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 <ipedrosa@redhat.com>
|
|
Reviewed-by: Sumit Bose <sbose@redhat.com>
|
|
---
|
|
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
|
|
|