}
}
- /* 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))
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);
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;
if (mask & (SD_BUS_CREDS_UID|SD_BUS_CREDS_GID|SD_BUS_CREDS_PID|SD_BUS_CREDS_PID_STARTTIME|SD_BUS_CREDS_TID))
m |= KDBUS_ATTACH_CREDS;
- if (mask & (SD_BUS_CREDS_COMM|SD_BUS_CREDS_TID_COMM))
- m |= KDBUS_ATTACH_COMM;
+ if (mask & SD_BUS_CREDS_COMM)
+ m |= KDBUS_ATTACH_PID_COMM;
+
+ if (mask & SD_BUS_CREDS_TID_COMM)
+ m |= KDBUS_ATTACH_TID_COMM;
if (mask & SD_BUS_CREDS_EXE)
m |= KDBUS_ATTACH_EXE;
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;
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;
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))