X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Fdbus-cgroup.c;h=775825bee912edd6bef66b878c1e52e907313b85;hp=4dbb83a76912fec0e419277a4b7487396a3c5146;hb=01efdf13a6ee9a14fd6d8b41a5d522d5917e1fbc;hpb=718db96199eb307751264e4163555662c9a389fa diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c index 4dbb83a76..775825bee 100644 --- a/src/core/dbus-cgroup.c +++ b/src/core/dbus-cgroup.c @@ -33,8 +33,8 @@ static int property_get_blockio_device_weight( const char *interface, const char *property, sd_bus_message *reply, - sd_bus_error *error, - void *userdata) { + void *userdata, + sd_bus_error *error) { CGroupContext *c = userdata; CGroupBlockIODeviceWeight *w; @@ -63,8 +63,8 @@ static int property_get_blockio_device_bandwidths( const char *interface, const char *property, sd_bus_message *reply, - sd_bus_error *error, - void *userdata) { + void *userdata, + sd_bus_error *error) { CGroupContext *c = userdata; CGroupBlockIODeviceBandwidth *b; @@ -97,8 +97,8 @@ static int property_get_device_allow( const char *interface, const char *property, sd_bus_message *reply, - sd_bus_error *error, - void *userdata) { + void *userdata, + sd_bus_error *error) { CGroupContext *c = userdata; CGroupDeviceAllow *a; @@ -278,6 +278,10 @@ int bus_cgroup_set_property( if (r < 0) return r; + r = sd_bus_message_exit_container(message); + if (r < 0) + return r; + if (mode != UNIT_CHECK) { CGroupBlockIODeviceBandwidth *a, *next; _cleanup_free_ char *buf = NULL; @@ -321,10 +325,9 @@ int bus_cgroup_set_property( if (r < 0) return r; - while (( r = sd_bus_message_read(message, "(st)", &path, &u64)) > 0) { - unsigned long ul; + while ((r = sd_bus_message_read(message, "(st)", &path, &u64)) > 0) { + unsigned long ul = u64; - ul = (unsigned long) u64; if (ul < 10 || ul > 1000) return sd_bus_error_set_errnof(error, EINVAL, "BlockIODeviceWeight out of range"); @@ -357,6 +360,10 @@ int bus_cgroup_set_property( n++; } + r = sd_bus_message_exit_container(message); + if (r < 0) + return r; + if (mode != UNIT_CHECK) { _cleanup_free_ char *buf = NULL; _cleanup_fclose_ FILE *f = NULL; @@ -443,8 +450,11 @@ int bus_cgroup_set_property( while ((r = sd_bus_message_read(message, "(ss)", &path, &rwm)) > 0) { - if (!path_startswith(path, "/dev")) - return sd_bus_error_set_errnof(error, EINVAL, "DeviceAllow= requires device node"); + if ((!startswith(path, "/dev/") && + !startswith(path, "block-") && + !startswith(path, "char-")) || + strpbrk(path, WHITESPACE)) + return sd_bus_error_set_errnof(error, EINVAL, "DeviceAllow= requires device node"); if (isempty(rwm)) rwm = "rwm"; @@ -479,11 +489,16 @@ int bus_cgroup_set_property( a->r = !!strchr(rwm, 'r'); a->w = !!strchr(rwm, 'w'); a->m = !!strchr(rwm, 'm'); - } n++; } + if (r < 0) + return r; + + r = sd_bus_message_exit_container(message); + if (r < 0) + return r; if (mode != UNIT_CHECK) { _cleanup_free_ char *buf = NULL;