From: David Herrmann Date: Fri, 12 Dec 2014 13:02:05 +0000 (+0100) Subject: bus: fix assert() on HELLO error-path X-Git-Tag: v219~1029 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=18ee085c155dcd5f196f2ef9b712698dfd377f82 bus: fix assert() on HELLO error-path Make sure we don't call into any bus_kernel_*() functions before b->is_kernel is set to true. Hard-code the CMD_FREE just like the other helpers do. --- diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c index 112292735..d910d8e49 100644 --- a/src/libsystemd/sd-bus/bus-kernel.c +++ b/src/libsystemd/sd-bus/bus-kernel.c @@ -815,6 +815,10 @@ fail: } int bus_kernel_take_fd(sd_bus *b) { + struct kdbus_cmd_free cmd_free = { + .size = sizeof(cmd_free), + .flags = 0, + }; struct kdbus_bloom_parameter *bloom = NULL; struct kdbus_cmd_hello *hello; struct kdbus_item_list *items; @@ -982,7 +986,8 @@ int bus_kernel_take_fd(sd_bus *b) { return bus_start_running(b); fail: - (void) bus_kernel_cmd_free(b, hello->offset); + cmd_free.offset = hello->offset; + (void) ioctl(b->input_fd, KDBUS_CMD_FREE, &cmd_free); return r; }