]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
analyze: fix memleak and missing oom check
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 17 Jul 2025 16:20:18 +0000 (01:20 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 17 Jul 2025 16:39:51 +0000 (01:39 +0900)
Follow-up for ad6e02e7b42db35178305614e643be7a62568d87.

src/analyze/analyze-unit-gdb.c
src/analyze/analyze.c
src/analyze/analyze.h

index fc06f86030872a9420084322189bef7b6db59d36..85e7488ca06fe78ad1998bba540f88d543903fbf 100644 (file)
@@ -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);
index 762317a6536ed09f029ee06e81af89b1be28226e..d76c09b5200251b55044c9855e809f3f543023a1 100644 (file)
@@ -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': {
index 1d489b723e98066d8374c8797559fe5d3dba8811..d5b7bfcb822b888d4b58bc8a3c3436803f8c4a83 100644 (file)
@@ -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;