浏览代码

[IB] Check port number in ib_query_port()/ib_modify_port()

Check port number before passing query_port or modify_port operations
on to device driver.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
Roland Dreier 19 年之前
父节点
当前提交
116c0074ec
共有 1 个文件被更改,包括 12 次插入0 次删除
  1. 12 0
      drivers/infiniband/core/device.c

+ 12 - 0
drivers/infiniband/core/device.c

@@ -514,6 +514,12 @@ int ib_query_port(struct ib_device *device,
 		  u8 port_num,
 		  u8 port_num,
 		  struct ib_port_attr *port_attr)
 		  struct ib_port_attr *port_attr)
 {
 {
+	if (device->node_type == IB_NODE_SWITCH) {
+		if (port_num)
+			return -EINVAL;
+	} else if (port_num < 1 || port_num > device->phys_port_cnt)
+		return -EINVAL;
+
 	return device->query_port(device, port_num, port_attr);
 	return device->query_port(device, port_num, port_attr);
 }
 }
 EXPORT_SYMBOL(ib_query_port);
 EXPORT_SYMBOL(ib_query_port);
@@ -583,6 +589,12 @@ int ib_modify_port(struct ib_device *device,
 		   u8 port_num, int port_modify_mask,
 		   u8 port_num, int port_modify_mask,
 		   struct ib_port_modify *port_modify)
 		   struct ib_port_modify *port_modify)
 {
 {
+	if (device->node_type == IB_NODE_SWITCH) {
+		if (port_num)
+			return -EINVAL;
+	} else if (port_num < 1 || port_num > device->phys_port_cnt)
+		return -EINVAL;
+
 	return device->modify_port(device, port_num, port_modify_mask,
 	return device->modify_port(device, port_num, port_modify_mask,
 				   port_modify);
 				   port_modify);
 }
 }