]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: fix memory leak during deserialization
authorFrantisek Sumsal <frantisek@sumsal.cz>
Fri, 12 May 2023 08:23:56 +0000 (10:23 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 12 May 2023 15:42:25 +0000 (00:42 +0900)
when activation-details-unit-name is encountered multiple times.

Resolves: #27623

src/core/unit.c
test/fuzz/fuzz-manager-serialize/clusterfuzz-testcase-minimized-fuzz-manager-serialize-5609602292252672 [new file with mode: 0644]

index d275adb9b0f51aa163ea3acdb9f9c537e03b385a..3393138bac1fd5b3cecca92c6e677169b2a9968c 100644 (file)
@@ -6151,6 +6151,8 @@ void activation_details_serialize(ActivationDetails *details, FILE *f) {
 }
 
 int activation_details_deserialize(const char *key, const char *value, ActivationDetails **details) {
+        int r;
+
         assert(key);
         assert(value);
         assert(details);
@@ -6182,9 +6184,9 @@ int activation_details_deserialize(const char *key, const char *value, Activatio
         }
 
         if (streq(key, "activation-details-unit-name")) {
-                (*details)->trigger_unit_name = strdup(value);
-                if (!(*details)->trigger_unit_name)
-                        return -ENOMEM;
+                r = free_and_strdup(&(*details)->trigger_unit_name, value);
+                if (r < 0)
+                        return r;
 
                 return 0;
         }
diff --git a/test/fuzz/fuzz-manager-serialize/clusterfuzz-testcase-minimized-fuzz-manager-serialize-5609602292252672 b/test/fuzz/fuzz-manager-serialize/clusterfuzz-testcase-minimized-fuzz-manager-serialize-5609602292252672
new file mode 100644 (file)
index 0000000..735b0e8
--- /dev/null
@@ -0,0 +1,6 @@
+
+y.service
+job
+activation-details-unit-type=path
+activation-details-unit-name
+activation-details-unit-name
\ No newline at end of file