net: remove MTU limits on a few ether_setup callers
authorJarod Wilson <jarod@redhat.com>
Fri, 21 Oct 2016 03:25:27 +0000 (23:25 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 21 Oct 2016 17:57:50 +0000 (13:57 -0400)
These few drivers call ether_setup(), but have no ndo_change_mtu, and thus
were overlooked for changes to MTU range checking behavior. They
previously had no range checks, so for feature-parity, set their min_mtu
to 0 and max_mtu to ETH_MAX_MTU (65535), instead of the 68 and 1500
inherited from the ether_setup() changes. Fine-tuning can come after we get
back to full feature-parity here.

CC: netdev@vger.kernel.org
Reported-by: Asbjoern Sloth Toennesen <asbjorn@asbjorn.st>
CC: Asbjoern Sloth Toennesen <asbjorn@asbjorn.st>
CC: R Parameswaran <parameswaran.r7@gmail.com>
Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/atm/br2684.c
net/bluetooth/bnep/netdev.c
net/dsa/slave.c
net/irda/irlan/irlan_eth.c
net/l2tp/l2tp_eth.c

index c7d82f4e8422a49ab0bf39ebac8f1338bdb7b275..fca84e111c8959ace7d6ec9a10dd0081c2944cd7 100644 (file)
@@ -649,7 +649,9 @@ static void br2684_setup_routed(struct net_device *netdev)
        netdev->hard_header_len = sizeof(llc_oui_ipv4); /* worst case */
        netdev->netdev_ops = &br2684_netdev_ops_routed;
        netdev->addr_len = 0;
-       netdev->mtu = 1500;
+       netdev->mtu = ETH_DATA_LEN;
+       netdev->min_mtu = 0;
+       netdev->max_mtu = ETH_MAX_MTU;
        netdev->type = ARPHRD_PPP;
        netdev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
        netdev->tx_queue_len = 100;
index 0f25ddc319e293ce701e7f111f4252ff677afb33..2b875edf77e1df271715df200821b90929517b57 100644 (file)
@@ -221,6 +221,8 @@ void bnep_net_setup(struct net_device *dev)
        dev->addr_len = ETH_ALEN;
 
        ether_setup(dev);
+       dev->min_mtu = 0;
+       dev->max_mtu = ETH_MAX_MTU;
        dev->priv_flags &= ~IFF_TX_SKB_SHARING;
        dev->netdev_ops = &bnep_netdev_ops;
 
index 68714a5f4a99c8bdebdc2721dc8f4980485437fd..d0c7bce88743b93f1b01b6fc98ea9c816f5d533d 100644 (file)
@@ -1247,6 +1247,8 @@ int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
        slave_dev->priv_flags |= IFF_NO_QUEUE;
        slave_dev->netdev_ops = &dsa_slave_netdev_ops;
        slave_dev->switchdev_ops = &dsa_slave_switchdev_ops;
+       slave_dev->min_mtu = 0;
+       slave_dev->max_mtu = ETH_MAX_MTU;
        SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
 
        netdev_for_each_tx_queue(slave_dev, dsa_slave_set_lockdep_class_one,
index 8192eaea4ecd1ada9bb0b74665535978582b9efb..74d09f91709e6121ed80b8f089283615a5ffce5e 100644 (file)
@@ -66,7 +66,8 @@ static void irlan_eth_setup(struct net_device *dev)
 
        dev->netdev_ops         = &irlan_eth_netdev_ops;
        dev->destructor         = free_netdev;
-
+       dev->min_mtu            = 0;
+       dev->max_mtu            = ETH_MAX_MTU;
 
        /*
         * Lets do all queueing in IrTTP instead of this device driver.
index 965f7e344cef8961a85c4e2e6d36f7d1b043f3d7..e2c6ae0245652521bbe96bd8227443b5f0267589 100644 (file)
@@ -259,6 +259,8 @@ static int l2tp_eth_create(struct net *net, u32 tunnel_id, u32 session_id, u32 p
                session->mtu = dev->mtu - session->hdr_len;
        dev->mtu = session->mtu;
        dev->needed_headroom += session->hdr_len;
+       dev->min_mtu = 0;
+       dev->max_mtu = ETH_MAX_MTU;
 
        priv = netdev_priv(dev);
        priv->dev = dev;