The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=b93a796b06ec013a75a08ac43d8acf6aa94aa970

commit b93a796b06ec013a75a08ac43d8acf6aa94aa970
Author:     Mark Johnston <ma...@freebsd.org>
AuthorDate: 2021-03-23 13:38:59 +0000
Commit:     Mark Johnston <ma...@freebsd.org>
CommitDate: 2021-03-23 14:04:31 +0000

    pf: Handle unmapped mbufs when computing checksums
    
    PR:             254419
    Reviewed by:    gallatin, kp
    Tested by:      Igor A. Valkov <viap...@gmail.com>
    MFC after:      3 days
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D29378
---
 sys/netpfil/pf/pf.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index 752e8a7eef1a..71635a061225 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -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;
        }
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to