From 4ca93aa808be9713f9ed6b9ce270914f64a62eee Mon Sep 17 00:00:00 2001 From: Volkan Unal Date: Fri, 26 Jun 2026 20:53:32 +0100 Subject: [PATCH] fdasd: Fix memory leak in yes_no() function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The yes_no() function was leaking memory when returning early from the loop, as the 'answer' buffer allocated by getline() was not freed before the return statements. Restructure the function to use a single exit point, ensuring free(answer) is always called before returning. Reviewed-by: Jan Höppner Signed-off-by: Volkan Unal Signed-off-by: Jan Höppner --- fdasd/fdasd.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/fdasd/fdasd.c b/fdasd/fdasd.c index 8301f91e..ffd7ae72 100644 --- a/fdasd/fdasd.c +++ b/fdasd/fdasd.c @@ -387,20 +387,28 @@ static int yes_no(char *question_str) ssize_t bytes_read; char *answer; size_t size; + int rc; size = 0; answer = NULL; while (1) { printf("%s (y/n): ", question_str); bytes_read = getline(&answer, &size, stdin); - if (bytes_read < 0) - return -1; - if (answer[0] == 'y') - return 0; - if (answer[0] == 'n') - return 1; + if (bytes_read < 0) { + rc = -1; + break; + } + if (answer[0] == 'y') { + rc = 0; + break; + } + if (answer[0] == 'n') { + rc = 1; + break; + } } free(answer); + return rc; } static char *fdasd_partition_type(char *dsname)