diff options
author | David Herrmann <dh.herrmann@gmail.com> | 2014-12-12 14:02:05 +0100 |
---|---|---|
committer | David Herrmann <dh.herrmann@gmail.com> | 2014-12-12 14:02:05 +0100 |
commit | 18ee085c155dcd5f196f2ef9b712698dfd377f82 (patch) | |
tree | 551a5290c08cf48cbefbc5db940b61937545ab1d | |
parent | ec16945ebfe64d5cd5403ae1a1b16bc05a779a16 (diff) |
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.
-rw-r--r-- | src/libsystemd/sd-bus/bus-kernel.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c index 112292735b..d910d8e492 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; } |