diff mbox series

[1/1] net: usb: qmi_wwan: restore mtu min/max values after raw_ip switch

Message ID 20200221131705.26053-1-dnlplm@gmail.com
State Accepted
Delegated to: David Miller
Headers show
Series [1/1] net: usb: qmi_wwan: restore mtu min/max values after raw_ip switch | expand

Commit Message

Daniele Palmas Feb. 21, 2020, 1:17 p.m. UTC
usbnet creates network interfaces with min_mtu = 0 and
max_mtu = ETH_MAX_MTU.

These values are not modified by qmi_wwan when the network interface
is created initially, allowing, for example, to set mtu greater than 1500.

When a raw_ip switch is done (raw_ip set to 'Y', then set to 'N') the mtu
values for the network interface are set through ether_setup, with
min_mtu = ETH_MIN_MTU and max_mtu = ETH_DATA_LEN, not allowing anymore to
set mtu greater than 1500 (error: mtu greater than device maximum).

The patch restores the original min/max mtu values set by usbnet after a
raw_ip switch.

Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
---
 drivers/net/usb/qmi_wwan.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Bjørn Mork Feb. 23, 2020, 1:40 p.m. UTC | #1
Daniele Palmas <dnlplm@gmail.com> writes:

> usbnet creates network interfaces with min_mtu = 0 and
> max_mtu = ETH_MAX_MTU.
>
> These values are not modified by qmi_wwan when the network interface
> is created initially, allowing, for example, to set mtu greater than 1500.
>
> When a raw_ip switch is done (raw_ip set to 'Y', then set to 'N') the mtu
> values for the network interface are set through ether_setup, with
> min_mtu = ETH_MIN_MTU and max_mtu = ETH_DATA_LEN, not allowing anymore to
> set mtu greater than 1500 (error: mtu greater than device maximum).
>
> The patch restores the original min/max mtu values set by usbnet after a
> raw_ip switch.
>
> Signed-off-by: Daniele Palmas <dnlplm@gmail.com>

Great! I tried to look up the origin of this bug, and it seems to be a
hard-to-spot fallout from the 'centralized MTU checking'.  Not easy to
see the hidden connection in usbnet.c and eth.c. Thanks for finding and
fixing it!

This should probably go to stable as well?

Acked-by: Bjørn Mork <bjorn@mork.no>
David Miller Feb. 24, 2020, 12:15 a.m. UTC | #2
From: Daniele Palmas <dnlplm@gmail.com>
Date: Fri, 21 Feb 2020 14:17:05 +0100

> usbnet creates network interfaces with min_mtu = 0 and
> max_mtu = ETH_MAX_MTU.
> 
> These values are not modified by qmi_wwan when the network interface
> is created initially, allowing, for example, to set mtu greater than 1500.
> 
> When a raw_ip switch is done (raw_ip set to 'Y', then set to 'N') the mtu
> values for the network interface are set through ether_setup, with
> min_mtu = ETH_MIN_MTU and max_mtu = ETH_DATA_LEN, not allowing anymore to
> set mtu greater than 1500 (error: mtu greater than device maximum).
> 
> The patch restores the original min/max mtu values set by usbnet after a
> raw_ip switch.
> 
> Signed-off-by: Daniele Palmas <dnlplm@gmail.com>

Applied and queued up for -stable.
Daniele Palmas Feb. 24, 2020, 8:38 a.m. UTC | #3
Il giorno dom 23 feb 2020 alle ore 14:41 Bjørn Mork <bjorn@mork.no> ha scritto:
>
> Daniele Palmas <dnlplm@gmail.com> writes:
>
> > usbnet creates network interfaces with min_mtu = 0 and
> > max_mtu = ETH_MAX_MTU.
> >
> > These values are not modified by qmi_wwan when the network interface
> > is created initially, allowing, for example, to set mtu greater than 1500.
> >
> > When a raw_ip switch is done (raw_ip set to 'Y', then set to 'N') the mtu
> > values for the network interface are set through ether_setup, with
> > min_mtu = ETH_MIN_MTU and max_mtu = ETH_DATA_LEN, not allowing anymore to
> > set mtu greater than 1500 (error: mtu greater than device maximum).
> >
> > The patch restores the original min/max mtu values set by usbnet after a
> > raw_ip switch.
> >
> > Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
>
> Great! I tried to look up the origin of this bug, and it seems to be a
> hard-to-spot fallout from the 'centralized MTU checking'.  Not easy to
> see the hidden connection in usbnet.c and eth.c. Thanks for finding and
> fixing it!
>
> This should probably go to stable as well?
>

Yes, I think it won't hurt.

Thanks,
Daniele

> Acked-by: Bjørn Mork <bjorn@mork.no>
diff mbox series

Patch

diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 3b7a3b8a5e06..5754bb6ca0ee 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -337,6 +337,9 @@  static void qmi_wwan_netdev_setup(struct net_device *net)
 		netdev_dbg(net, "mode: raw IP\n");
 	} else if (!net->header_ops) { /* don't bother if already set */
 		ether_setup(net);
+		/* Restoring min/max mtu values set originally by usbnet */
+		net->min_mtu = 0;
+		net->max_mtu = ETH_MAX_MTU;
 		clear_bit(EVENT_NO_IP_ALIGN, &dev->flags);
 		netdev_dbg(net, "mode: Ethernet\n");
 	}