net: limit GSO_MAX_SIZE to 524280 bytes
authorEric Dumazet <edumazet@google.com>
Fri, 13 May 2022 18:33:58 +0000 (11:33 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 16 May 2022 09:18:55 +0000 (10:18 +0100)
Make sure we will not overflow shinfo->gso_segs

Minimal TCP MSS size is 8 bytes, and shinfo->gso_segs
is a 16bit field.

TCP_MIN_GSO_SIZE is currently defined in include/net/tcp.h,
it seems cleaner to not bring tcp details into include/linux/netdevice.h

Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Alexander Duyck <alexanderduyck@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h

index ce780e3..fd38847 100644 (file)
@@ -2272,14 +2272,17 @@ struct net_device {
        const struct rtnl_link_ops *rtnl_link_ops;
 
        /* for setting kernel sock attribute on TCP connection setup */
+#define GSO_MAX_SEGS           65535u
 #define GSO_LEGACY_MAX_SIZE    65536u
-#define GSO_MAX_SIZE           UINT_MAX
+/* TCP minimal MSS is 8 (TCP_MIN_GSO_SIZE),
+ * and shinfo->gso_segs is a 16bit field.
+ */
+#define GSO_MAX_SIZE           (8 * GSO_MAX_SEGS)
 
        unsigned int            gso_max_size;
 #define TSO_LEGACY_MAX_SIZE    65536
 #define TSO_MAX_SIZE           UINT_MAX
        unsigned int            tso_max_size;
-#define GSO_MAX_SEGS           65535
        u16                     gso_max_segs;
 #define TSO_MAX_SEGS           U16_MAX
        u16                     tso_max_segs;