From: Moshe Lazer Date: Tue, 25 Mar 2014 08:54:15 +0000 (+0200) Subject: IB/mlx4: Check port_num before using it in mlx4_ib_port_link_layer X-Git-Tag: v4.1.12-92~293^2~1^2~40 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=78f676f4c9fc7e850376bb8a820f1cbfa99242d3;p=users%2Fjedix%2Flinux-maple.git IB/mlx4: Check port_num before using it in mlx4_ib_port_link_layer In mlx4_ib_port_link_layer func port_num is used as table index without checking its validity. Signed-off-by: Moshe Lazer (Ported from OFED 2.4) Signed-off-by: Mukesh Kacker --- diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 445f418990697..0092e0acbf135 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c @@ -242,8 +242,17 @@ mlx4_ib_port_link_layer(struct ib_device *device, u8 port_num) { struct mlx4_dev *dev = to_mdev(device)->dev; - return dev->caps.port_mask[port_num] == MLX4_PORT_TYPE_IB ? - IB_LINK_LAYER_INFINIBAND : IB_LINK_LAYER_ETHERNET; + if (port_num > MLX4_MAX_PORTS || port_num == 0) + return IB_LINK_LAYER_UNSPECIFIED; + + switch (dev->caps.port_mask[port_num]) { + case MLX4_PORT_TYPE_IB: + return IB_LINK_LAYER_INFINIBAND; + case MLX4_PORT_TYPE_ETH: + return IB_LINK_LAYER_ETHERNET; + } + + return IB_LINK_LAYER_UNSPECIFIED; } static int ib_link_query_port(struct ib_device *ibdev, u8 port,