struct kdbus_queue_entry *entry = NULL;
int ret;
+ /* Reject unknown flags */
+ if (recv->flags & ~(KDBUS_RECV_PEEK |
+ KDBUS_RECV_DROP |
+ KDBUS_RECV_USE_PRIORITY))
+ return -EOPNOTSUPP;
+
if (recv->offset > 0)
return -EINVAL;
int ret = 0;
u64 flags;
+ if (cmd_info->flags & ~_KDBUS_ATTACH_ALL)
+ return -EOPNOTSUPP;
+
if (cmd_info->id == 0) {
const char *name;
u64 attach_flags;
int ret;
+ if (cmd->flags != 0)
+ return -EOPNOTSUPP;
+
KDBUS_ITEMS_FOREACH(item, cmd->items, KDBUS_ITEMS_SIZE(cmd, items)) {
switch (item->type) {
case KDBUS_ITEM_ATTACH_FLAGS:
BUG_ON(*c);
+ /* Reject unknown flags */
+ if (hello->conn_flags & ~(KDBUS_HELLO_ACCEPT_FD |
+ KDBUS_HELLO_ACTIVATOR |
+ KDBUS_HELLO_POLICY_HOLDER |
+ KDBUS_HELLO_MONITOR))
+ return -EOPNOTSUPP;
+
is_monitor = hello->conn_flags & KDBUS_HELLO_MONITOR;
is_activator = hello->conn_flags & KDBUS_HELLO_ACTIVATOR;
is_policy_holder = hello->conn_flags & KDBUS_HELLO_POLICY_HOLDER;
break;
}
+ /* Reject unknown flags */
+ if (make->flags & ~(KDBUS_MAKE_ACCESS_GROUP |
+ KDBUS_MAKE_ACCESS_WORLD)) {
+ ret = -EOPNOTSUPP;
+ break;
+ }
+
if (make->flags & KDBUS_MAKE_ACCESS_WORLD) {
mode = 0666;
} else if (make->flags & KDBUS_MAKE_ACCESS_GROUP) {
break;
}
+ /* Reject unknown flags */
+ if (make->flags & ~(KDBUS_MAKE_ACCESS_GROUP |
+ KDBUS_MAKE_ACCESS_WORLD)) {
+ ret = -EOPNOTSUPP;
+ break;
+ }
+
if (make->flags & KDBUS_MAKE_ACCESS_WORLD)
mode = 0666;
} else if (make->flags & KDBUS_MAKE_ACCESS_GROUP) {
mode = 0660;
gid = current_fsgid();
+ } else if (make->flags) {
+ ret = -EOPNOTSUPP;
+ break;
}
/* custom endpoints always have a policy db */
if (ret < 0)
break;
+ if (cmd_cancel.flags != 0)
+ return -EOPNOTSUPP;
+
ret = kdbus_cmd_msg_cancel(conn, cmd_cancel.cookie);
break;
}
if (ret < 0)
break;
+ if (cmd_free.flags != 0)
+ return -EOPNOTSUPP;
+
ret = kdbus_pool_release_offset(conn->pool, cmd_free.offset);
break;
}
lockdep_assert_held(conn);
+ if (cmd->flags != 0)
+ return -EOPNOTSUPP;
+
entry = kzalloc(sizeof(*entry), GFP_KERNEL);
if (!entry) {
ret = -ENOMEM;
lockdep_assert_held(conn);
+ if (cmd->flags != 0)
+ return -EOPNOTSUPP;
+
mutex_lock(&db->entries_lock);
ret = __kdbus_match_db_remove_unlocked(db, cmd->cookie);
mutex_unlock(&db->entries_lock);
goto exit_free;
}
+ /* Reject unknown flags */
+ if (m->msg.flags & ~(KDBUS_MSG_FLAGS_EXPECT_REPLY |
+ KDBUS_MSG_FLAGS_SYNC_REPLY |
+ KDBUS_MSG_FLAGS_NO_AUTO_START)) {
+ ret = -EOPNOTSUPP;
+ goto exit_free;
+ }
+
if (m->msg.flags & KDBUS_MSG_FLAGS_EXPECT_REPLY) {
/* requests for replies need a timeout */
if (m->msg.timeout_ns == 0) {
const char *name;
int ret;
+ if (cmd->flags & ~(KDBUS_NAME_REPLACE_EXISTING |
+ KDBUS_NAME_ALLOW_REPLACEMENT |
+ KDBUS_NAME_QUEUE))
+ return -EOPNOTSUPP;
+
if (conn->name_count > KDBUS_CONN_MAX_NAMES)
return -E2BIG;
int ret;
const char *name;
+ if (cmd->flags != 0)
+ return -EOPNOTSUPP;
+
ret = kdbus_items_get_str(cmd->items, KDBUS_ITEMS_SIZE(cmd, items),
KDBUS_ITEM_NAME, &name);
if (ret < 0)
policy_db = &conn->ep->policy_db;
+ /* Reject unknown flags */
+ if (cmd->flags & ~(KDBUS_NAME_LIST_UNIQUE |
+ KDBUS_NAME_LIST_NAMES |
+ KDBUS_NAME_LIST_ACTIVATORS |
+ KDBUS_NAME_LIST_QUEUED))
+ return -EOPNOTSUPP;
+
/* lock order: domain -> bus -> ep -> names -> conn */
down_read(&conn->bus->conn_rwlock);
down_read(®->rwlock);