From: Yu Watanabe Date: Tue, 19 Dec 2017 06:30:59 +0000 (+0900) Subject: dbus-socket: move truncation check to bus_socket_set_transient_property() X-Git-Tag: v237~183^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b48e508db310306b9a17bf9f37c87feca7ef0d87;p=thirdparty%2Fsystemd.git dbus-socket: move truncation check to bus_socket_set_transient_property() --- diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c index 26ab6b9ea50..e73ae9ddfa2 100644 --- a/src/core/dbus-socket.c +++ b/src/core/dbus-socket.c @@ -381,6 +381,9 @@ static int bus_socket_set_transient_property( if (r < 0) return r; + if ((uint64_t) (size_t) t != t) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid %s: %" PRIu64, name, t); + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { if (streq(name, "ReceiveBuffer")) s->receive_buffer = t; diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c index b9224bb23cf..92a7de83411 100644 --- a/src/shared/bus-unit-util.c +++ b/src/shared/bus-unit-util.c @@ -241,12 +241,12 @@ static int bus_append_parse_sec_rename(sd_bus_message *m, const char *field, con return 1; } -static int bus_append_parse_iec_size(sd_bus_message *m, const char *field, const char *eq) { +static int bus_append_parse_size(sd_bus_message *m, const char *field, const char *eq, uint64_t base) { uint64_t v; int r; - r = parse_size(eq, 1024, &v); - if (r < 0 || (uint64_t) (size_t) v != v) + r = parse_size(eq, base, &v); + if (r < 0) return log_error_errno(r, "Failed to parse %s=%s: %m", field, eq); r = sd_bus_message_append(m, "(sv)", field, "t", v); @@ -1235,7 +1235,7 @@ static int bus_append_socket_property(sd_bus_message *m, const char *field, cons if (STR_IN_SET(field, "ReceiveBuffer", "SendBuffer", "PipeSize")) - return bus_append_parse_iec_size(m, field, eq); + return bus_append_parse_size(m, field, eq, 1024); if (STR_IN_SET(field, "ExecStartPre", "ExecStartPost", "ExecReload", "ExecStopPost"))