From 7f13af72f894529502267e7eed8e8b480a350345 Mon Sep 17 00:00:00 2001 From: Antonio Alvarez Feijoo Date: Mon, 8 Jan 2024 16:08:26 +0100 Subject: [PATCH] tmpfiles: fix memory leak in arg_exclude_prefixes When using the `--image` or `-E` options, `arg_exclude_prefixes` is extended via the `exclude_default_prefixes` function, which calls `strv_extend_strv`, adding values using `strdup` that must be freed on exit. Also changing `arg_include_prefixes` to use the same model, although there is no leak here. --- src/tmpfiles/tmpfiles.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index aa6e72207f..94339d8163 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -218,8 +218,8 @@ typedef struct Context { Set *unix_sockets; } Context; -STATIC_DESTRUCTOR_REGISTER(arg_include_prefixes, freep); -STATIC_DESTRUCTOR_REGISTER(arg_exclude_prefixes, freep); +STATIC_DESTRUCTOR_REGISTER(arg_include_prefixes, strv_freep); +STATIC_DESTRUCTOR_REGISTER(arg_exclude_prefixes, strv_freep); STATIC_DESTRUCTOR_REGISTER(arg_root, freep); STATIC_DESTRUCTOR_REGISTER(arg_image, freep); STATIC_DESTRUCTOR_REGISTER(arg_image_policy, image_policy_freep); @@ -4129,12 +4129,12 @@ static int parse_argv(int argc, char *argv[]) { break; case ARG_PREFIX: - if (strv_push(&arg_include_prefixes, optarg) < 0) + if (strv_extend(&arg_include_prefixes, optarg) < 0) return log_oom(); break; case ARG_EXCLUDE_PREFIX: - if (strv_push(&arg_exclude_prefixes, optarg) < 0) + if (strv_extend(&arg_exclude_prefixes, optarg) < 0) return log_oom(); break; -- 2.25.1