chiark / gitweb /
systemctl: fix bad memory access when processing PIDs on the "systemctl status" comma...
authorLennart Poettering <lennart@poettering.net>
Sat, 21 Dec 2013 04:07:44 +0000 (05:07 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 21 Dec 2013 04:15:09 +0000 (05:15 +0100)
src/systemctl/systemctl.c

index d1f68754a91a5c957eb45c7ceb73ba8e838ae615..d0a03d9f290941a91f8e76a7ebcdfe59e38a7891 100644 (file)
@@ -3678,6 +3678,7 @@ static int get_unit_dbus_path_by_pid(
 
         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
 
         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
+        char *u;
         int r;
 
         r = sd_bus_call_method(
         int r;
 
         r = sd_bus_call_method(
@@ -3694,10 +3695,15 @@ static int get_unit_dbus_path_by_pid(
                 return r;
         }
 
                 return r;
         }
 
-        r = sd_bus_message_read(reply, "o", unit);
+        r = sd_bus_message_read(reply, "o", &u);
         if (r < 0)
                 return bus_log_parse_error(r);
 
         if (r < 0)
                 return bus_log_parse_error(r);
 
+        u = strdup(u);
+        if (!u)
+                return log_oom();
+
+        *unit = u;
         return 0;
 }
 
         return 0;
 }
 
@@ -3880,8 +3886,10 @@ static int show(sd_bus *bus, char **args) {
                         } else {
                                 /* Interpret as PID */
                                 r = get_unit_dbus_path_by_pid(bus, id, &unit);
                         } else {
                                 /* Interpret as PID */
                                 r = get_unit_dbus_path_by_pid(bus, id, &unit);
-                                if (r < 0)
+                                if (r < 0) {
                                         ret = r;
                                         ret = r;
+                                        continue;
+                                }
                         }
 
                         show_one(args[0], bus, unit, show_properties, &new_line, &ellipsized);
                         }
 
                         show_one(args[0], bus, unit, show_properties, &new_line, &ellipsized);