From: Yu Watanabe Date: Thu, 17 Jul 2025 16:20:18 +0000 (+0900) Subject: analyze: fix memleak and missing oom check X-Git-Tag: v258-rc1~36^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3bfc3414e606c82f7196a234ac7df8905320252e;p=thirdparty%2Fsystemd.git analyze: fix memleak and missing oom check Follow-up for ad6e02e7b42db35178305614e643be7a62568d87. --- diff --git a/src/analyze/analyze-unit-gdb.c b/src/analyze/analyze-unit-gdb.c index fc06f860308..85e7488ca06 100644 --- a/src/analyze/analyze-unit-gdb.c +++ b/src/analyze/analyze-unit-gdb.c @@ -63,8 +63,11 @@ int verb_unit_gdb(int argc, char *argv[], void *userdata) { if (r < 0) return log_error_errno(r, "Failed to read the main PID of %s from reply: %m", unit); - if (!arg_debugger) - arg_debugger = secure_getenv("SYSTEMD_DEBUGGER") ?: "gdb"; + if (!arg_debugger) { + arg_debugger = strdup(secure_getenv("SYSTEMD_DEBUGGER") ?: "gdb"); + if (!arg_debugger) + return log_oom(); + } _cleanup_strv_free_ char **debugger_call = NULL; r = strv_extend(&debugger_call, arg_debugger); diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c index 762317a6536..d76c09b5200 100644 --- a/src/analyze/analyze.c +++ b/src/analyze/analyze.c @@ -81,8 +81,8 @@ usec_t arg_fuzz = 0; PagerFlags arg_pager_flags = 0; CatFlags arg_cat_flags = 0; BusTransport arg_transport = BUS_TRANSPORT_LOCAL; -const char *arg_debugger = NULL; -static char **arg_debugger_args = NULL; +char *arg_debugger = NULL; +char **arg_debugger_args = NULL; const char *arg_host = NULL; RuntimeScope arg_runtime_scope = RUNTIME_SCOPE_SYSTEM; RecursiveErrors arg_recursive_errors = _RECURSIVE_ERRORS_INVALID; @@ -109,6 +109,8 @@ char *arg_drm_device_path = NULL; STATIC_DESTRUCTOR_REGISTER(arg_dot_from_patterns, strv_freep); STATIC_DESTRUCTOR_REGISTER(arg_dot_to_patterns, strv_freep); +STATIC_DESTRUCTOR_REGISTER(arg_debugger, freep); +STATIC_DESTRUCTOR_REGISTER(arg_debugger_args, strv_freep); STATIC_DESTRUCTOR_REGISTER(arg_root, freep); STATIC_DESTRUCTOR_REGISTER(arg_image, freep); STATIC_DESTRUCTOR_REGISTER(arg_security_policy, freep); @@ -665,7 +667,9 @@ static int parse_argv(int argc, char *argv[]) { break; case ARG_DEBUGGER: - arg_debugger = strdup(optarg); + r = free_and_strdup_warn(&arg_debugger, optarg); + if (r < 0) + return r; break; case 'A': { diff --git a/src/analyze/analyze.h b/src/analyze/analyze.h index 1d489b723e9..d5b7bfcb822 100644 --- a/src/analyze/analyze.h +++ b/src/analyze/analyze.h @@ -24,7 +24,8 @@ extern PagerFlags arg_pager_flags; extern CatFlags arg_cat_flags; extern BusTransport arg_transport; extern const char *arg_host; -extern const char *arg_debugger; +extern char *arg_debugger; +extern char **arg_debugger_args; extern RuntimeScope arg_runtime_scope; extern RecursiveErrors arg_recursive_errors; extern bool arg_man;