VYPR
Unrated severityNVD Advisory· Published Jun 3, 2026

CVE-2026-46273

CVE-2026-46273

Description

Linux kernel ibmveth driver freezes network adapters when sending small MSS packets, fixed by disabling GSO for such packets.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Linux kernel ibmveth driver freezes network adapters when sending small MSS packets, fixed by disabling GSO for such packets.

Vulnerability

The Linux kernel's ibmveth driver has a vulnerability where certain physical adapters on Power systems do not support segmentation offload (GSO) for packets with a Maximum Segment Size (MSS) less than 224 bytes. Attempting to send such packets causes the adapter to freeze, halting all traffic until a manual reset. This issue occurs specifically when the hardware attempts GSO with gso_segs > 1 and a small MSS; single-segment GSO packets are unaffected. The fix involves implementing an ndo_features_check callback to disable GSO when MSS is less than 224 bytes, ensuring software segmentation is used instead [1].

Exploitation

An attacker would need to trigger the network stack to send packets with a small MSS (less than 224 bytes) using the ibmveth driver, specifically when GSO is attempted with multiple segments. This could potentially be achieved by manipulating network traffic, for instance, by using tools like iptables to force small MSS values, leading to the adapter freezing and stopping all traffic [1].

Impact

Successful exploitation of this vulnerability results in a denial-of-service condition. The affected network adapter freezes, causing all network traffic to stop until it is manually reset. This effectively renders the network interface unusable, disrupting services and connectivity.

Mitigation

This vulnerability has been resolved in the Linux kernel by disabling GSO for packets with small MSS values. The specific commit addressing this issue is f10b09ef687f [1]. No specific fixed version or release date is provided in the references, but the fix is available in newer kernel versions. No workarounds are mentioned, and the vulnerability is not listed as being on the KEV. The provided references are primarily commit logs and do not contain further details on mitigation or EOL status.

AI Insight generated on Jun 3, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected products

3

Patches

16
cc427d24ac64

ibmveth: Disable GSO for packets with small MSS

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitMingming CaoApr 24, 2026Fixed in 7.1-rc2via kernel-cna
2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 58cc3147afe26..73e051d26b9d8 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1756,6 +1756,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1767,6 +1788,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 068f99df133ec..d87713668ed30 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -37,6 +37,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
86fc64584811

ibmveth: Disable GSO for packets with small MSS

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitMingming CaoApr 24, 2026Fixed in 5.10.258via kernel-cna
2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index d80f155574c67..401bab4c0babe 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1620,6 +1620,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1631,6 +1652,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 27dfff2001662..2b364974bf096 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
9a5e984d7af9

ibmveth: Disable GSO for packets with small MSS

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitMingming CaoApr 24, 2026Fixed in 5.15.209via kernel-cna
2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 67ea2cb21e849..f16449735a99b 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1624,6 +1624,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1635,6 +1656,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 27dfff2001662..2b364974bf096 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
1cdf5dbcec98

ibmveth: Disable GSO for packets with small MSS

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitMingming CaoApr 24, 2026Fixed in 6.1.175via kernel-cna
2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 1d21a281222d9..eec089acc519f 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1637,6 +1637,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1648,6 +1669,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 115d4c45aa77d..0e1dff1024442 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
82bc89fbb82d

ibmveth: Disable GSO for packets with small MSS

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitMingming CaoApr 24, 2026Fixed in 6.6.140via kernel-cna
2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index a332a0e3154a2..be12eaf080e90 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1630,6 +1630,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1641,6 +1662,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 8468e2c59d7a4..bc1c1bb83c40c 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
db8012c631cb

ibmveth: Disable GSO for packets with small MSS

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitMingming CaoApr 24, 2026Fixed in 6.12.88via kernel-cna
2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 04192190bebab..7dbf2f9df359d 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1608,6 +1608,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1619,6 +1640,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 8468e2c59d7a4..bc1c1bb83c40c 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
c1f261863e65

ibmveth: Disable GSO for packets with small MSS

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitMingming CaoApr 24, 2026Fixed in 6.18.30via kernel-cna
2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 6f0821f1e798a..6e9552ce4c8c6 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1756,6 +1756,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1767,6 +1788,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 068f99df133ec..d87713668ed30 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -37,6 +37,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
3af24f0c4c31

ibmveth: Disable GSO for packets with small MSS

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.gitMingming CaoApr 24, 2026Fixed in 7.0.7via kernel-cna
2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 4d6b9e83e3412..b813dd9b39ed4 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1756,6 +1756,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1767,6 +1788,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 068f99df133ec..d87713668ed30 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -37,6 +37,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
1cdf5dbcec98

ibmveth: Disable GSO for packets with small MSS

2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 1d21a281222d9..eec089acc519f 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1637,6 +1637,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1648,6 +1669,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 115d4c45aa77d..0e1dff1024442 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
3af24f0c4c31

ibmveth: Disable GSO for packets with small MSS

2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 4d6b9e83e3412..b813dd9b39ed4 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1756,6 +1756,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1767,6 +1788,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 068f99df133ec..d87713668ed30 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -37,6 +37,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
82bc89fbb82d

ibmveth: Disable GSO for packets with small MSS

2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index a332a0e3154a2..be12eaf080e90 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1630,6 +1630,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1641,6 +1662,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 8468e2c59d7a4..bc1c1bb83c40c 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
86fc64584811

ibmveth: Disable GSO for packets with small MSS

2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index d80f155574c67..401bab4c0babe 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1620,6 +1620,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1631,6 +1652,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 27dfff2001662..2b364974bf096 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
9a5e984d7af9

ibmveth: Disable GSO for packets with small MSS

2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 67ea2cb21e849..f16449735a99b 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1624,6 +1624,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1635,6 +1656,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 27dfff2001662..2b364974bf096 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
c1f261863e65

ibmveth: Disable GSO for packets with small MSS

2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 6f0821f1e798a..6e9552ce4c8c6 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1756,6 +1756,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1767,6 +1788,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 068f99df133ec..d87713668ed30 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -37,6 +37,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
cc427d24ac64

ibmveth: Disable GSO for packets with small MSS

2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 58cc3147afe26..73e051d26b9d8 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1756,6 +1756,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1767,6 +1788,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 068f99df133ec..d87713668ed30 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -37,6 +37,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    
db8012c631cb

ibmveth: Disable GSO for packets with small MSS

2 files changed · +23 1
  • drivers/net/ethernet/ibm/ibmveth.c+22 0 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 04192190bebab..7dbf2f9df359d 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1608,6 +1608,27 @@ static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
     	return 0;
     }
     
    +static netdev_features_t ibmveth_features_check(struct sk_buff *skb,
    +						struct net_device *dev,
    +						netdev_features_t features)
    +{
    +	/* Some physical adapters do not support segmentation offload with
    +	 * MSS < 224. Disable GSO for such packets to avoid adapter freeze.
    +	 * Note: Single-segment packets (gso_segs == 1) don't need this check
    +	 * as they bypass the LSO path and are transmitted without segmentation.
    +	 */
    +	if (skb_is_gso(skb)) {
    +		if (skb_shinfo(skb)->gso_size < IBMVETH_MIN_LSO_MSS) {
    +			netdev_warn_once(dev,
    +					 "MSS %u too small for LSO, disabling GSO\n",
    +					 skb_shinfo(skb)->gso_size);
    +			features &= ~NETIF_F_GSO_MASK;
    +		}
    +	}
    +
    +	return vlan_features_check(skb, features);
    +}
    +
     static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_open		= ibmveth_open,
     	.ndo_stop		= ibmveth_close,
    @@ -1619,6 +1640,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
     	.ndo_set_features	= ibmveth_set_features,
     	.ndo_validate_addr	= eth_validate_addr,
     	.ndo_set_mac_address    = ibmveth_set_mac_addr,
    +	.ndo_features_check	= ibmveth_features_check,
     #ifdef CONFIG_NET_POLL_CONTROLLER
     	.ndo_poll_controller	= ibmveth_poll_controller,
     #endif
    
  • drivers/net/ethernet/ibm/ibmveth.h+1 1 modified
    diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h
    index 8468e2c59d7a4..bc1c1bb83c40c 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.h
    +++ b/drivers/net/ethernet/ibm/ibmveth.h
    @@ -36,6 +36,7 @@
     #define IBMVETH_ILLAN_IPV4_TCP_CSUM		0x0000000000000002UL
     #define IBMVETH_ILLAN_ACTIVE_TRUNK		0x0000000000000001UL
     
    +#define IBMVETH_MIN_LSO_MSS		224	/* Minimum MSS for LSO */
     /* hcall macros */
     #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \
       plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac)
    -- 
    cgit 1.3-korg
    
    
    

Vulnerability mechanics

Root cause

"The ibmveth driver incorrectly allowed segmentation offload for packets with a small MSS, causing adapter freezes."

Attack vector

An attacker can trigger this vulnerability by sending network packets with a small Maximum Segment Size (MSS) value. Specifically, when the hardware attempts to perform segmentation on these small MSS packets (gso_segs > 1), it causes the physical adapter to freeze. This issue is related to the Large Send Offload (LSO) functionality and can halt all network traffic until the adapter is manually reset.

Affected code

The vulnerability lies within the `ibmveth` driver, specifically in the `drivers/net/ethernet/ibm/ibmveth.c` file. The fix involves adding the `ibmveth_features_check` function and registering it as the `ndo_features_check` callback in the `ibmveth_netdev_ops` structure [patch_id=4686508]. A new constant `IBMVETH_MIN_LSO_MSS` is defined in `drivers/net/ethernet/ibm/ibmveth.h` [patch_id=4686508].

What the fix does

The patch introduces an `ndo_features_check` callback to the `ibmveth` driver. This callback checks the size of Generic Segmentation Offload (GSO) packets. If the GSO size (MSS) is less than 224 bytes, the callback disables GSO for that packet. This forces the network stack to perform software segmentation instead of relying on the hardware, preventing the adapter freeze. The fix also ensures proper handling of VLAN packets by calling `vlan_features_check()` [patch_id=4686508].

Preconditions

  • configThe system must be using Power systems with specific physical adapters that do not support segmentation offload for MSS less than 224 bytes.
  • inputNetwork packets with a small Maximum Segment Size (MSS) value.

Generated on Jun 3, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

8

News mentions

2