Disabling GRO on this device will likely work as temporary workaround. What we can do is instead of dropping packets to correct their offset: case SKB_GSO_TCPV4: case SKB_GSO_TCPV6: - if (skb->csum_offset != offsetof(struct tcphdr, check)) - return -EINVAL; + if (skb->csum_offset != offsetof(struct tcphdr, check)) { + DEBUG_NET_WARN_ON_ONCE(1); + skb->csum_offset = offsetof(struct tcphdr, check); + } If the issue is in csum_offset. If the new csum_start check fails, that won't help. It would be helpful to see these values at this point, e.g., with skb_dump(KERN_INFO, skb, false);