]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cgroup: add missing OOM check, and shorten code a bit 13905/head
authorLennart Poettering <lennart@poettering.net>
Fri, 1 Nov 2019 09:22:03 +0000 (10:22 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 1 Nov 2019 09:22:03 +0000 (10:22 +0100)
cpu_set_to_range_string() can fail due to OOM. Handle that.

unit_write_settingf() exists, use it instead of formatting a string
beforehand.

cpu_set_add_all() can fail due to OOM. Let's avoid it if we don't have
to use it, just copy over the cpuset directly.

src/core/dbus-cgroup.c

index b30318b943f857fd2c7e76e3cf6fbbc1a6f379f7..647c3a512c8a9213e9d861cc39b1ae9a1c7427ca 100644 (file)
@@ -926,23 +926,23 @@ int bus_cgroup_set_property(
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *setstr = NULL;
-                        _cleanup_free_ char *data = NULL;
                         CPUSet *set;
 
                         setstr = cpu_set_to_range_string(&new_set);
+                        if (!setstr)
+                                return -ENOMEM;
 
                         if (streq(name, "AllowedCPUs"))
                                 set = &c->cpuset_cpus;
                         else
                                 set = &c->cpuset_mems;
 
-                        if (asprintf(&data, "%s=%s", name, setstr) < 0)
-                                return -ENOMEM;
-
                         cpu_set_reset(set);
-                        cpu_set_add_all(set, &new_set);
+                        *set = new_set;
+                        new_set = (CPUSet) {};
+
                         unit_invalidate_cgroup(u, CGROUP_MASK_CPUSET);
-                        unit_write_setting(u, flags, name, data);
+                        unit_write_settingf(u, flags, name, "%s=%s", name, setstr);
                 }
 
                 return 1;