]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/timer: fix memleak
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 10 May 2022 05:09:24 +0000 (14:09 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 10 May 2022 11:50:50 +0000 (13:50 +0200)
Fixes #23326.

src/core/timer.c

index ab107860a7e451c1cb451ec281bda8fb1b858bb3..17663a175b8b3488d9f088abd2afdc00f6f3a78a 100644 (file)
@@ -132,6 +132,7 @@ static int timer_add_trigger_dependencies(Timer *t) {
 }
 
 static int timer_setup_persistent(Timer *t) {
+        _cleanup_free_ char *stamp_path = NULL;
         int r;
 
         assert(t);
@@ -145,13 +146,13 @@ static int timer_setup_persistent(Timer *t) {
                 if (r < 0)
                         return r;
 
-                t->stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id);
+                stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id);
         } else {
                 const char *e;
 
                 e = getenv("XDG_DATA_HOME");
                 if (e)
-                        t->stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id);
+                        stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id);
                 else {
 
                         _cleanup_free_ char *h = NULL;
@@ -160,14 +161,14 @@ static int timer_setup_persistent(Timer *t) {
                         if (r < 0)
                                 return log_unit_error_errno(UNIT(t), r, "Failed to determine home directory: %m");
 
-                        t->stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id);
+                        stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id);
                 }
         }
 
-        if (!t->stamp_path)
+        if (!stamp_path)
                 return log_oom();
 
-        return 0;
+        return free_and_replace(t->stamp_path, stamp_path);
 }
 
 static uint64_t timer_get_fixed_delay_hash(Timer *t) {