pf: Handle unmapped mbufs when computing checksums
PR: 254419 Reviewed by: gallatin, kp Tested by: Igor A. Valkov <viaprog@gmail.com> MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D29378
This commit is contained in:
parent
1240fba44d
commit
b93a796b06
@ -5571,11 +5571,17 @@ pf_route(struct mbuf **m, struct pf_krule *r, int dir, struct ifnet *oifp,
|
||||
/* Copied from FreeBSD 10.0-CURRENT ip_output. */
|
||||
m0->m_pkthdr.csum_flags |= CSUM_IP;
|
||||
if (m0->m_pkthdr.csum_flags & CSUM_DELAY_DATA & ~ifp->if_hwassist) {
|
||||
m0 = mb_unmapped_to_ext(m0);
|
||||
if (m0 == NULL)
|
||||
goto done;
|
||||
in_delayed_cksum(m0);
|
||||
m0->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
|
||||
}
|
||||
#if defined(SCTP) || defined(SCTP_SUPPORT)
|
||||
if (m0->m_pkthdr.csum_flags & CSUM_SCTP & ~ifp->if_hwassist) {
|
||||
m0 = mb_unmapped_to_ext(m0);
|
||||
if (m0 == NULL)
|
||||
goto done;
|
||||
sctp_delayed_cksum(m0, (uint32_t)(ip->ip_hl << 2));
|
||||
m0->m_pkthdr.csum_flags &= ~CSUM_SCTP;
|
||||
}
|
||||
@ -5752,6 +5758,9 @@ pf_route6(struct mbuf **m, struct pf_krule *r, int dir, struct ifnet *oifp,
|
||||
if (m0->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6 &
|
||||
~ifp->if_hwassist) {
|
||||
uint32_t plen = m0->m_pkthdr.len - sizeof(*ip6);
|
||||
m0 = mb_unmapped_to_ext(m0);
|
||||
if (m0 == NULL)
|
||||
goto done;
|
||||
in6_delayed_cksum(m0, plen, sizeof(struct ip6_hdr));
|
||||
m0->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user