chiark / gitweb /
bus: add and use UINT64_TO_PTR()
[elogind.git] / src / libsystemd-bus / bus-kernel.c
index aecf40864597efd030ff60acd24b87983a806ef7..071f2b9708f166c4f4f31131c97eb3e4364b4b0c 100644 (file)
@@ -45,7 +45,7 @@
 #define KDBUS_ITEM_HEADER_SIZE offsetof(struct kdbus_item, data)
 #define KDBUS_ITEM_SIZE(s) ALIGN8((s) + KDBUS_ITEM_HEADER_SIZE)
 
-#define KDBUS_BUFFER_SIZE (4*1024*1024)
+#define KDBUS_POOL_SIZE (4*1024*1024)
 
 static int parse_unique_name(const char *s, uint64_t *id) {
         int r;
@@ -72,7 +72,7 @@ static void append_payload_vec(struct kdbus_item **d, const void *p, size_t sz)
 
         (*d)->size = offsetof(struct kdbus_item, vec) + sizeof(struct kdbus_vec);
         (*d)->type = KDBUS_MSG_PAYLOAD_VEC;
-        (*d)->vec.address = (intptr_t) p;
+        (*d)->vec.address = (uint64_t) p;
         (*d)->vec.size = sz;
 
         *d = (struct kdbus_item *) ((uint8_t*) *d + (*d)->size);
@@ -292,7 +292,7 @@ int bus_kernel_take_fd(sd_bus *b) {
                 return -EINVAL;
 
         if (!b->kdbus_buffer) {
-                b->kdbus_buffer = mmap(NULL, KDBUS_BUFFER_SIZE, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
+                b->kdbus_buffer = mmap(NULL, KDBUS_POOL_SIZE, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
                 if (b->kdbus_buffer == MAP_FAILED) {
                         b->kdbus_buffer = NULL;
                         return -errno;
@@ -310,10 +310,10 @@ int bus_kernel_take_fd(sd_bus *b) {
                 KDBUS_HELLO_ATTACH_SECLABEL|
                 KDBUS_HELLO_ATTACH_AUDIT;
 
-        hello->items[0].type = KDBUS_HELLO_BUFFER;
+        hello->items[0].type = KDBUS_HELLO_POOL;
         hello->items[0].size = KDBUS_ITEM_HEADER_SIZE + sizeof(struct kdbus_vec);
         hello->items[0].vec.address = (uint64_t) b->kdbus_buffer;
-        hello->items[0].vec.size = KDBUS_BUFFER_SIZE;
+        hello->items[0].vec.size = KDBUS_POOL_SIZE;
 
         r = ioctl(b->input_fd, KDBUS_CMD_HELLO, hello);
         if (r < 0)
@@ -436,7 +436,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
                                 if (d->vec.size < sizeof(struct bus_header))
                                         return -EBADMSG;
 
-                                h = (struct bus_header*) d->vec.address;
+                                h = (struct bus_header*)UINT64_TO_PTR(d->vec.address);
                         }
 
                         n_payload++;
@@ -471,8 +471,8 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
         if (n_bytes != total)
                 return -EBADMSG;
 
-        if (n_payload > 2)
-                return -EBADMSG;
+        //if (n_payload > 2)
+        //        return -EBADMSG;
 
         r = bus_message_from_header(h, sizeof(struct bus_header), fds, n_fds, NULL, seclabel, 0, &m);
         if (r < 0)
@@ -485,8 +485,10 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess
 
                 if (d->type == KDBUS_MSG_PAYLOAD_VEC) {
 
-                        range_contains(idx, d->vec.size, ALIGN8(sizeof(struct bus_header)), BUS_MESSAGE_FIELDS_SIZE(m), (void*) d->vec.address, &m->fields);
-                        range_contains(idx, d->vec.size, ALIGN8(sizeof(struct bus_header)) + ALIGN8(BUS_MESSAGE_FIELDS_SIZE(m)), BUS_MESSAGE_BODY_SIZE(m), (void*) d->vec.address, &m->body);
+                        range_contains(idx, d->vec.size, ALIGN8(sizeof(struct bus_header)), BUS_MESSAGE_FIELDS_SIZE(m),
+                                       UINT64_TO_PTR(d->vec.address), &m->fields);
+                        range_contains(idx, d->vec.size, ALIGN8(sizeof(struct bus_header)) + ALIGN8(BUS_MESSAGE_FIELDS_SIZE(m)),
+                                       BUS_MESSAGE_BODY_SIZE(m), UINT64_TO_PTR(d->vec.address), &m->body);
 
                         idx += d->vec.size;
 
@@ -624,7 +626,7 @@ int bus_kernel_create(const char *name, char **s) {
         n->size = KDBUS_ITEM_HEADER_SIZE + strlen(n->str) + 1;
 
         make->size = offsetof(struct kdbus_cmd_bus_make, items) + cg->size + n->size;
-        make->flags = KDBUS_MAKE_ACCESS_WORLD | KDBUS_MAKE_POLICY_OPEN;
+        make->flags = KDBUS_MAKE_POLICY_OPEN;
         make->bus_flags = 0;
         make->bloom_size = BLOOM_SIZE;
         assert_cc(BLOOM_SIZE % 8 == 0);