IB/ipoib: Ensure that MTU isn't less than minimum permitted
authorMuhammad Sammar <muhammads@mellanox.com>
Tue, 28 Aug 2018 11:45:30 +0000 (14:45 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Nov 2019 16:59:47 +0000 (17:59 +0100)
[ Upstream commit 142a9c287613560edf5a03c8d142c8b6ebc1995b ]

It is illegal to change MTU to a value lower than the minimum MTU
stated in ethernet spec. In addition to that we need to add 4 bytes
for encapsulation header (IPOIB_ENCAP_LEN).

Before "ifconfig ib0 mtu 0" command, succeeds while it obviously shouldn't.

Signed-off-by: Muhammad Sammar <muhammads@mellanox.com>
Reviewed-by: Feras Daoud <ferasda@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/ulp/ipoib/ipoib_main.c

index 1a93d3d58c8a49fc4fc3e961ca0511d88e9e945d..caae4bfab950de9565b6a0bf68d243771761e5ae 100644 (file)
@@ -249,7 +249,8 @@ static int ipoib_change_mtu(struct net_device *dev, int new_mtu)
                return 0;
        }
 
-       if (new_mtu > IPOIB_UD_MTU(priv->max_ib_mtu))
+       if (new_mtu < (ETH_MIN_MTU + IPOIB_ENCAP_LEN) ||
+           new_mtu > IPOIB_UD_MTU(priv->max_ib_mtu))
                return -EINVAL;
 
        priv->admin_mtu = new_mtu;