diff options
Diffstat (limited to 'drivers/infiniband/core')
-rw-r--r-- | drivers/infiniband/core/Makefile | 1 | ||||
-rw-r--r-- | drivers/infiniband/core/cma_configfs.c | 8 | ||||
-rw-r--r-- | drivers/infiniband/core/netlink.c | 13 | ||||
-rw-r--r-- | drivers/infiniband/core/nldev.c | 4 |
4 files changed, 20 insertions, 6 deletions
diff --git a/drivers/infiniband/core/Makefile b/drivers/infiniband/core/Makefile index b4df164f71a6..9c0a2b5c834e 100644 --- a/drivers/infiniband/core/Makefile +++ b/drivers/infiniband/core/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 infiniband-$(CONFIG_INFINIBAND_ADDR_TRANS) := rdma_cm.o user_access-$(CONFIG_INFINIBAND_ADDR_TRANS) := rdma_ucm.o diff --git a/drivers/infiniband/core/cma_configfs.c b/drivers/infiniband/core/cma_configfs.c index 54076a3e8007..31dfee0c8295 100644 --- a/drivers/infiniband/core/cma_configfs.c +++ b/drivers/infiniband/core/cma_configfs.c @@ -186,7 +186,7 @@ static struct configfs_attribute *cma_configfs_attributes[] = { NULL, }; -static struct config_item_type cma_port_group_type = { +static const struct config_item_type cma_port_group_type = { .ct_attrs = cma_configfs_attributes, .ct_owner = THIS_MODULE }; @@ -263,7 +263,7 @@ static struct configfs_item_operations cma_ports_item_ops = { .release = release_cma_ports_group }; -static struct config_item_type cma_ports_group_type = { +static const struct config_item_type cma_ports_group_type = { .ct_item_ops = &cma_ports_item_ops, .ct_owner = THIS_MODULE }; @@ -272,7 +272,7 @@ static struct configfs_item_operations cma_device_item_ops = { .release = release_cma_dev }; -static struct config_item_type cma_device_group_type = { +static const struct config_item_type cma_device_group_type = { .ct_item_ops = &cma_device_item_ops, .ct_owner = THIS_MODULE }; @@ -323,7 +323,7 @@ static struct configfs_group_operations cma_subsys_group_ops = { .make_group = make_cma_dev, }; -static struct config_item_type cma_subsys_type = { +static const struct config_item_type cma_subsys_type = { .ct_group_ops = &cma_subsys_group_ops, .ct_owner = THIS_MODULE, }; diff --git a/drivers/infiniband/core/netlink.c b/drivers/infiniband/core/netlink.c index b12e58787c3d..1fb72c356e36 100644 --- a/drivers/infiniband/core/netlink.c +++ b/drivers/infiniband/core/netlink.c @@ -175,13 +175,24 @@ static int rdma_nl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, !netlink_capable(skb, CAP_NET_ADMIN)) return -EPERM; + /* + * LS responses overload the 0x100 (NLM_F_ROOT) flag. Don't + * mistakenly call the .dump() function. + */ + if (index == RDMA_NL_LS) { + if (cb_table[op].doit) + return cb_table[op].doit(skb, nlh, extack); + return -EINVAL; + } /* FIXME: Convert IWCM to properly handle doit callbacks */ if ((nlh->nlmsg_flags & NLM_F_DUMP) || index == RDMA_NL_RDMA_CM || index == RDMA_NL_IWCM) { struct netlink_dump_control c = { .dump = cb_table[op].dump, }; - return netlink_dump_start(nls, skb, nlh, &c); + if (c.dump) + return netlink_dump_start(nls, skb, nlh, &c); + return -EINVAL; } if (cb_table[op].doit) diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c index 3ba24c428c3b..2fae850a3eff 100644 --- a/drivers/infiniband/core/nldev.c +++ b/drivers/infiniband/core/nldev.c @@ -214,7 +214,9 @@ static int nldev_port_get_doit(struct sk_buff *skb, struct nlmsghdr *nlh, err = nlmsg_parse(nlh, 0, tb, RDMA_NLDEV_ATTR_MAX - 1, nldev_policy, extack); - if (err || !tb[RDMA_NLDEV_ATTR_PORT_INDEX]) + if (err || + !tb[RDMA_NLDEV_ATTR_DEV_INDEX] || + !tb[RDMA_NLDEV_ATTR_PORT_INDEX]) return -EINVAL; index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]); |