]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
hostnamed: in get_hardware_firmware_data() don't dup a string if we shan't return it
authorLennart Poettering <lennart@poettering.net>
Fri, 1 Mar 2024 13:45:37 +0000 (14:45 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 1 Mar 2024 21:37:38 +0000 (22:37 +0100)
src/hostname/hostnamed.c

index ee2df8f2ff18f2758889f1cb34c8a4f6ed8f59e9..25e7b193cd1cbfb648abeb24d8300b9358c2265e 100644 (file)
@@ -249,7 +249,6 @@ static int get_hardware_model(char **ret) {
 
 static int get_hardware_firmware_data(const char *sysattr, char **ret) {
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
-        _cleanup_free_ char *b = NULL;
         const char *s = NULL;
         int r;
 
@@ -263,16 +262,24 @@ static int get_hardware_firmware_data(const char *sysattr, char **ret) {
                 return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m");
 
         (void) sd_device_get_sysattr_value(device, sysattr, &s);
-        if (!isempty(s)) {
-                b = strdup(s);
-                if (!b)
-                        return -ENOMEM;
-        }
 
-        if (ret)
-                *ret = TAKE_PTR(b);
+        bool empty = isempty(s);
+
+        if (ret) {
+                if (empty)
+                        *ret = NULL;
+                else {
+                        _cleanup_free_ char *b = NULL;
+
+                        b = strdup(s);
+                        if (!b)
+                                return -ENOMEM;
+
+                        *ret = TAKE_PTR(b);
+                }
+        }
 
-        return !isempty(s);
+        return !empty;
 }
 
 static int get_hardware_serial(char **ret) {