|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
From d663f1b1a92a778bcdc68f29b8c08cb49431b4f7 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
From: Daniel Mack <daniel@zonque.org>
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Date: Mon, 6 Oct 2014 18:36:16 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Subject: [PATCH] sd-bus: sync kdbus.h (ABI break)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
The KDBUS_CMD_FREE ioctl now uses a struct rather than a direct pointer
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
to the offset to free.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
The KDBUS_CMD_MSG_CANCEL ioctl has also changes, but there's no user of
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
it yet in systemd.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/bus-proxyd/bus-proxyd.c | 6 +++++-
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/libsystemd/sd-bus/bus-control.c | 23 ++++++++++++++++++++---
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/libsystemd/sd-bus/bus-kernel.c | 7 +++++--
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/libsystemd/sd-bus/kdbus.h | 32 ++++++++++++++++++++++++++++++--
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
4 files changed, 60 insertions(+), 8 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index 5d58cd2af4..cbec04933c 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/bus-proxyd/bus-proxyd.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/bus-proxyd/bus-proxyd.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -730,6 +730,7 @@ static int process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
} else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "ListQueuedOwners")) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_cmd_name_list cmd = {};
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_name_list *name_list;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ struct kdbus_cmd_free cmd_free;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_cmd_name *name;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
_cleanup_strv_free_ char **owners = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
char *arg0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -773,7 +774,10 @@ static int process_driver(sd_bus *a, sd_bus *b, sd_bus_message *m) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- r = ioctl(a->input_fd, KDBUS_CMD_FREE, &cmd.offset);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ cmd_free.flags = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ cmd_free.offset = cmd.offset;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ r = ioctl(a->input_fd, KDBUS_CMD_FREE, &cmd_free);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return synthetic_reply_method_errno(m, r, NULL);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index d9a53c702f..dbd94fc46b 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/libsystemd/sd-bus/bus-control.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/libsystemd/sd-bus/bus-control.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -223,6 +223,23 @@ _public_ int sd_bus_release_name(sd_bus *bus, const char *name) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return bus_release_name_dbus1(bus, name);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+static int kernel_cmd_free(sd_bus *bus, uint64_t offset)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+{
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ struct kdbus_cmd_free cmd;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ int r;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ assert(bus);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ cmd.flags = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ cmd.offset = offset;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ r = ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return -errno;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_cmd_name_list cmd = {};
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_name_list *name_list;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -269,9 +286,9 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- r = ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd.offset);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ r = kernel_cmd_free(bus, cmd.offset);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- return -errno;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return r;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -597,7 +614,7 @@ static int bus_get_owner_kdbus(
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
r = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
fail:
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd->offset);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ kernel_cmd_free(bus, cmd->offset);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index 09ff25fe71..5ae1418afc 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/libsystemd/sd-bus/bus-kernel.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/libsystemd/sd-bus/bus-kernel.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -799,14 +799,17 @@ int bus_kernel_connect(sd_bus *b) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ struct kdbus_cmd_free cmd;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
uint64_t off _alignas_(8);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_item *d;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
assert(bus);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
assert(k);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- off = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- ioctl(bus->input_fd, KDBUS_CMD_FREE, &off;;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ cmd.flags = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ cmd.offset = (uint8_t *)k - (uint8_t *)bus->kdbus_buffer;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ ioctl(bus->input_fd, KDBUS_CMD_FREE, &cmd);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
KDBUS_ITEM_FOREACH(d, k, items) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/libsystemd/sd-bus/kdbus.h b/src/libsystemd/sd-bus/kdbus.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index 801125946b..8994b5673d 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/libsystemd/sd-bus/kdbus.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/libsystemd/sd-bus/kdbus.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -444,6 +444,31 @@ struct kdbus_cmd_recv {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
} __attribute__((aligned(8)));
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
/**
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * struct kdbus_cmd_cancel - struct to cancel a synchronously pending message
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * @cookie The cookie of the pending message
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * @flags Flags for the free command. Currently unused.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ *
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * This struct is used with the KDBUS_CMD_CANCEL ioctl.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ */
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+struct kdbus_cmd_cancel {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ __u64 cookie;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ __u64 flags;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+} __attribute__((aligned(8)));
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+/**
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * struct kdbus_cmd_free - struct to free a slice of memory in the pool
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * @offset The offset of the memory slice, as returned by other
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * ioctls
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * @flags Flags for the free command. Currently unused.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ *
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ * This struct is used with the KDBUS_CMD_FREE ioctl.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ */
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+struct kdbus_cmd_free {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ __u64 offset;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ __u64 flags;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+} __attribute__((aligned(8)));
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+/**
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
* enum kdbus_policy_access_type - permissions of a policy record
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
* @_KDBUS_POLICY_ACCESS_NULL: Uninitialized/invalid
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
* @KDBUS_POLICY_ACCESS_USER: Grant access to a uid
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -710,6 +735,7 @@ struct kdbus_conn_info {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
*/
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_cmd_update {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
__u64 size;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ __u64 flags;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_item items[0];
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
} __attribute__((aligned(8)));
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -807,8 +833,10 @@ enum kdbus_ioctl_type {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_msg),
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
KDBUS_CMD_MSG_RECV = _IOWR(KDBUS_IOCTL_MAGIC, 0x41,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_cmd_recv),
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- KDBUS_CMD_MSG_CANCEL = _IOW(KDBUS_IOCTL_MAGIC, 0x42, __u64 *),
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- KDBUS_CMD_FREE = _IOW(KDBUS_IOCTL_MAGIC, 0x43, __u64 *),
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ KDBUS_CMD_MSG_CANCEL = _IOW(KDBUS_IOCTL_MAGIC, 0x42,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ struct kdbus_cmd_cancel),
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ KDBUS_CMD_FREE = _IOW(KDBUS_IOCTL_MAGIC, 0x43,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ struct kdbus_cmd_free),
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
KDBUS_CMD_NAME_ACQUIRE = _IOWR(KDBUS_IOCTL_MAGIC, 0x50,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct kdbus_cmd_name),
|