[RFC net] net: force software segmentation of PPPoE packets

From: Qingfang Deng

Date: Tue Oct 20 2026 - 11:28:49 EST


Ordinary TSO does not update the PPPoE payload length. A PPPoE GRO packet
forwarded by a bridge can retain hardware GSO features and reach the
driver without software segmentation, if the egress Ethernet interface
advertises TSO.

To force software segmentation, clear the GSO feature mask for
ETH_P_PPP_SES in harmonize_features().

Fixes: 55a5d8fca836 ("net: pppoe: implement GRO/GSO support")
Signed-off-by: Qingfang Deng <qingfang.deng@xxxxxxxxx>
---
net/core/dev.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/net/core/dev.c b/net/core/dev.c
index a6951ea08961..27483a2ad747 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3831,6 +3831,10 @@ static netdev_features_t harmonize_features(struct sk_buff *skb,
type = skb_network_protocol(skb, NULL);
features = net_mpls_features(skb, features, type);

+ /* Ordinary TSO does not update the PPPoE payload length. */
+ if (IS_ENABLED(CONFIG_PPPOE) && type == htons(ETH_P_PPP_SES))
+ features &= ~NETIF_F_GSO_MASK;
+
if (skb->ip_summed != CHECKSUM_NONE &&
!can_checksum_protocol(features, type)) {
features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
--
2.34.1