Hi, When we preserve M_TCP_TSO we also must keep ph_mss. In lo(4) LRO/TSO this logic was missing. As this may be relevant only for weird pf configs that forward from loopback and ifconfig tcplro is disabled by default, it is not relevant yet.
ok? bluhm Index: net/if.c =================================================================== RCS file: /cvs/src/sys/net/if.c,v retrieving revision 1.705 diff -u -p -r1.705 if.c --- net/if.c 7 Jul 2023 08:05:02 -0000 1.705 +++ net/if.c 7 Jul 2023 08:47:21 -0000 @@ -782,6 +782,7 @@ int if_input_local(struct ifnet *ifp, struct mbuf *m, sa_family_t af) { int keepflags, keepcksum; + uint16_t keepmss; #if NBPFILTER > 0 /* @@ -807,9 +808,11 @@ if_input_local(struct ifnet *ifp, struct keepcksum = m->m_pkthdr.csum_flags & (M_IPV4_CSUM_OUT | M_TCP_CSUM_OUT | M_UDP_CSUM_OUT | M_ICMP_CSUM_OUT | M_TCP_TSO); + keepmss = m->m_pkthdr.ph_mss; m_resethdr(m); m->m_flags |= M_LOOP | keepflags; m->m_pkthdr.csum_flags = keepcksum; + m->m_pkthdr.ph_mss = keepmss; m->m_pkthdr.ph_ifidx = ifp->if_index; m->m_pkthdr.ph_rtableid = ifp->if_rdomain;