Message ID | 20250221161405.1921296-1-mheib@redhat.com (mailing list archive) |
---|---|
State | New |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: Clear old fragment checksum value in napi_get_frags | expand |
diff --git a/net/core/gro.c b/net/core/gro.c index 78b320b63174..e98007d8f26f 100644 --- a/net/core/gro.c +++ b/net/core/gro.c @@ -675,6 +675,8 @@ struct sk_buff *napi_get_frags(struct napi_struct *napi) napi->skb = skb; skb_mark_napi_id(skb, napi); } + } else { + skb->ip_summed = CHECKSUM_NONE; } return skb; }
In certain cases, napi_get_frags() returns an skb that points to an old received fragment, This skb may have its skb->ip_summed, csum, and other fields set from previous fragment handling. Some network drivers set skb->ip_summed to either CHECKSUM_COMPLETE or CHECKSUM_UNNECESSARY when getting skb from napi_get_frags(), while others only set skb->ip_summed when RX checksum offload is enabled on the device, and do not set any value for skb->ip_summed when hardware checksum offload is disabled, assuming that the skb->ip_summed initiated to zero by napi_get_frags. This inconsistency sometimes leads to checksum validation issues in the upper layers of the network stack. To resolve this, this patch clears the skb->ip_summed value for each skb returned by napi_get_frags(), ensuring that the caller is responsible for setting the correct checksum status. This eliminates potential checksum validation issues caused by improper handling of skb->ip_summed. Fixes: 76620aafd66f ("gro: New frags interface to avoid copying shinfo") Signed-off-by: Mohammad Heib <mheib@redhat.com> --- net/core/gro.c | 2 ++ 1 file changed, 2 insertions(+)