}
int bus_kernel_read_message(sd_bus *bus) {
+ struct kdbus_cmd_recv recv = {};
struct kdbus_msg *k;
- uint64_t off;
int r;
assert(bus);
if (r < 0)
return r;
- r = ioctl(bus->input_fd, KDBUS_CMD_MSG_RECV, &off);
+ r = ioctl(bus->input_fd, KDBUS_CMD_MSG_RECV, &recv);
if (r < 0) {
if (errno == EAGAIN)
return 0;
return -errno;
}
- k = (struct kdbus_msg *)((uint8_t *)bus->kdbus_buffer + off);
+ k = (struct kdbus_msg *)((uint8_t *)bus->kdbus_buffer + recv.offset);
if (k->payload_type == KDBUS_PAYLOAD_DBUS) {
r = bus_kernel_make_message(bus, k);
assert_se(pthread_mutex_lock(&bus->memfd_cache_mutex) >= 0);
if (bus->n_memfd_cache <= 0) {
+ struct kdbus_cmd_memfd_make cmd = {
+ .size = sizeof(struct kdbus_cmd_memfd_make),
+ };
int r;
assert_se(pthread_mutex_unlock(&bus->memfd_cache_mutex) >= 0);
- r = ioctl(bus->input_fd, KDBUS_CMD_MEMFD_NEW, &fd);
+ r = ioctl(bus->input_fd, KDBUS_CMD_MEMFD_NEW, &cmd);
if (r < 0)
return -errno;
*address = NULL;
*mapped = 0;
*allocated = 0;
- return fd;
+ return cmd.fd;
}
c = &bus->memfd_cache[--bus->n_memfd_cache];