diff options
-rw-r--r-- | src/libsystemd/sd-bus/bus-control.c | 2 | ||||
-rw-r--r-- | src/libsystemd/sd-bus/bus-kernel.c | 31 | ||||
-rw-r--r-- | src/libsystemd/sd-bus/kdbus.h | 5 |
3 files changed, 12 insertions, 26 deletions
diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c index 7b106a3274..cf733a663c 100644 --- a/src/libsystemd/sd-bus/bus-control.c +++ b/src/libsystemd/sd-bus/bus-control.c @@ -169,7 +169,7 @@ static int bus_release_name_kernel(sd_bus *bus, const char *name) { if (r < 0) return -errno; - return n->flags; + return 0; } static int bus_release_name_dbus1(sd_bus *bus, const char *name) { diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c index c3dbc837d7..ac0ae5366e 100644 --- a/src/libsystemd/sd-bus/bus-kernel.c +++ b/src/libsystemd/sd-bus/bus-kernel.c @@ -751,10 +751,9 @@ int bus_kernel_take_fd(sd_bus *b) { } } - /* The higher 32bit of both flags fields are considered + /* The higher 32bit of the bus_flags fields are considered * 'incompatible flags'. Refuse them all for now. */ - if (hello->bus_flags > 0xFFFFFFFFULL || - hello->conn_flags > 0xFFFFFFFFULL) + if (hello->bus_flags > 0xFFFFFFFFULL) return -ENOTSUP; if (!bloom_validate_parameters((size_t) hello->bloom.size, (unsigned) hello->bloom.n_hash)) @@ -821,6 +820,7 @@ static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) { int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m, bool hint_sync_call) { int r; + uint64_t flags; assert(bus); assert(m); @@ -843,7 +843,12 @@ int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m, bool hint_sync_call if (hint_sync_call) m->kdbus->flags |= KDBUS_MSG_FLAGS_EXPECT_REPLY|KDBUS_MSG_FLAGS_SYNC_REPLY; + /* The kernel will return the set of supported flags in m->kdbus->flags. + * Save the current message flags before issuing the ioctl, and restore them + * afterwards */ + flags = m->kdbus->flags; r = ioctl(bus->output_fd, KDBUS_CMD_MSG_SEND, m->kdbus); + m->kdbus->flags = flags; if (r < 0) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; sd_bus_message *reply; @@ -1307,13 +1312,6 @@ int bus_kernel_create_bus(const char *name, bool world, char **s) { return -errno; } - /* The features field are considered 'incompatible flags'. - * Refuse them all for now. */ - if (make->features) { - safe_close(fd); - return -ENOTSUP; - } - if (s) { char *p; @@ -1444,13 +1442,6 @@ int bus_kernel_create_endpoint(const char *bus_name, const char *ep_name, char * return -errno; } - /* The features field are considered 'incompatible flags'. - * Refuse them all for now. */ - if (make->features) { - safe_close(fd); - return -ENOTSUP; - } - if (ep_path) { char *p; @@ -1574,11 +1565,9 @@ int bus_kernel_make_starter( if (ioctl(fd, KDBUS_CMD_HELLO, hello) < 0) return -errno; - /* The higher 32bit of both flags fields are considered + /* The higher 32bit of the bus_flags fields are considered * 'incompatible flags'. Refuse them all for now. */ - if (hello->features || - hello->bus_flags > 0xFFFFFFFFULL || - hello->conn_flags > 0xFFFFFFFFULL) + if (hello->bus_flags > 0xFFFFFFFFULL) return -ENOTSUP; if (!bloom_validate_parameters((size_t) hello->bloom.size, (unsigned) hello->bloom.n_hash)) diff --git a/src/libsystemd/sd-bus/kdbus.h b/src/libsystemd/sd-bus/kdbus.h index 79a17f3449..453a8d18bc 100644 --- a/src/libsystemd/sd-bus/kdbus.h +++ b/src/libsystemd/sd-bus/kdbus.h @@ -26,6 +26,7 @@ #define KDBUS_DST_ID_NAME (0) #define KDBUS_MATCH_ID_ANY (~0ULL) #define KDBUS_DST_ID_BROADCAST (~0ULL) +#define KDBUS_FLAG_KERNEL (1ULL << 63) /** * struct kdbus_notify_id_change - name registry change message @@ -554,7 +555,6 @@ enum kdbus_attach_flags { /** * struct kdbus_cmd_hello - struct to say hello to kdbus * @size: The total size of the structure - * @features: Feature negotiation bitmask * @conn_flags: Connection flags (KDBUS_HELLO_*). * @attach_flags: Mask of metadata to attach to each message sent * (KDBUS_ATTACH_*) @@ -574,7 +574,6 @@ enum kdbus_attach_flags { */ struct kdbus_cmd_hello { __u64 size; - __u64 features; __u64 conn_flags; __u64 attach_flags; __u64 bus_flags; @@ -598,7 +597,6 @@ enum kdbus_make_flags { /** * struct kdbus_cmd_make - struct to make a bus, an endpoint or a domain * @size: The total size of the struct - * @features: Feature negotiation bitmask * @flags: Properties for the bus/ep/domain to create * @items: Items describing details * @@ -607,7 +605,6 @@ enum kdbus_make_flags { */ struct kdbus_cmd_make { __u64 size; - __u64 features; __u64 flags; struct kdbus_item items[0]; } __attribute__((aligned(8))); |