Date: Fri, 21 Feb 2025 10:43:26 GMT From: Kristof Provost <kp@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 27cb3328173e - main - pf: micro-optimise padding check Message-ID: <202502211043.51LAhQ6F057990@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=27cb3328173e4de80fad90c3b794b3eb0320d69a commit 27cb3328173e4de80fad90c3b794b3eb0320d69a Author: Kristof Provost <kp@FreeBSD.org> AuthorDate: 2025-02-14 15:23:53 +0000 Commit: Kristof Provost <kp@FreeBSD.org> CommitDate: 2025-02-21 09:16:52 +0000 pf: micro-optimise padding check In most cases, IP fragments do not have an Ethernet padding. So add a condition to save a useless call to m_adj() and have a paranoid length check in the other cases. OK henning@ Obtained from: OpenBSD, bluhm <bluhm@openbsd.org>, fcf0d61153 Obtained from: OpenBSD, chris <chris@openbsd.org>, ebe64b684c Sponsored by: Rubicon Communications, LLC ("Netgate") --- sys/netpfil/pf/pf_norm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/netpfil/pf/pf_norm.c b/sys/netpfil/pf/pf_norm.c index ac74434cf2b7..98539be8c6ce 100644 --- a/sys/netpfil/pf/pf_norm.c +++ b/sys/netpfil/pf/pf_norm.c @@ -706,7 +706,8 @@ pf_join_fragment(struct pf_fragment *frag) TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); m = frent->fe_m; - m_adj(m, (frent->fe_hdrlen + frent->fe_len) - m->m_pkthdr.len); + if ((frent->fe_hdrlen + frent->fe_len) < m->m_pkthdr.len) + m_adj(m, (frent->fe_hdrlen + frent->fe_len) - m->m_pkthdr.len); uma_zfree(V_pf_frent_z, frent); while ((frent = TAILQ_FIRST(&frag->fr_queue)) != NULL) { TAILQ_REMOVE(&frag->fr_queue, frent, fr_next); @@ -715,7 +716,8 @@ pf_join_fragment(struct pf_fragment *frag) /* Strip off ip header. */ m_adj(m2, frent->fe_hdrlen); /* Strip off any trailing bytes. */ - m_adj(m2, frent->fe_len - m2->m_pkthdr.len); + if (frent->fe_len < m2->m_pkthdr.len) + m_adj(m2, frent->fe_len - m2->m_pkthdr.len); uma_zfree(V_pf_frent_z, frent); m_cat(m, m2);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202502211043.51LAhQ6F057990>