From nobody Wed May 28 21:55:49 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4b73GZ3ncCz5xK6B; Wed, 28 May 2025 21:55:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4b73GY64GQz476n; Wed, 28 May 2025 21:55:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748469349; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CRF/NvQ3EZ4zROufeENkoMP3qtMuY0+87W/Vjkc5OWM=; b=PceR3psoTVUoER7OHHE3GPhnGK6B6+vOwf+AcJ4/AcD6U0ZntKS9+MAOQja566w8pxPUgH VEceVBoM25BJ3G1qNmVopkgTkujPtUXt013/oifQq59lE5SGbF5SPxH2oVwJbCrIB5rUjZ mVtd+ouLLvthi64XFAbwati0vxOrO1hTd40wzSxAwUKCHFEaLtr2uiHk0V+HGXfZM79VLu /mYvrjYOSsH0NIsCsZznqNXWBJxrHvkuot5mtdRd3YDR1lYMN7H0o59MKJpkjjI+XSuzQC X1zyIf7yD4plDW6Y/C9y3mSPK1R/vkdKBfLTmUdL2s4AZRj5gqu4KIyDo5VRMA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1748469349; a=rsa-sha256; cv=none; b=Bl0/1KO84P5GPthnL6mW+C8/o/UPMvB/Alblg2dLIjMPUNRL7EUO0YglTWluN56+FnRUSi XU3rQrh/dmcP/+SMaJU0hlfxOlHoJfEkv2g4MBa4+GwOCyBJPyePKf8di/pjUS1G5/2dg2 YLokDLCe0oy7Bj9D6efY5G9wcWw6Q21TTBZFSzlLNn55q6rJoprfIiwRriDRamIgO6tEWZ QQz4VjIlFgPpJAdgOzt3DnhAApgo247BByiqgvk+ncB9XE8B3TAGhzVGKC4EIEGd8nQXZV NIuYNnIP2LBAgDRhJmg6LrzuiqDFtd0a41vgXgujFFMulBQ3PXatMHOIKt8IsQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1748469349; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CRF/NvQ3EZ4zROufeENkoMP3qtMuY0+87W/Vjkc5OWM=; b=bajLpPTHiyaH5tEIt1qPzIrZEuLlN3WXTa+nQ1d3YevBAyXEDjblNoRCegOy71+0O5Lisb RvVEUFGCbl/HplVFAReSSah1ULyz1S7kPkWKKcS6gdjqEZL0Nyb4PZGwJykHXK+bP4+3EQ dcthMwb+DRhKGEeoJzJdZ+zZCtnzTnhuA7VQltGmIx831tfob2yRNK/xP3jZ655o2Fg7k3 M4O6IsoMmQVDO/glK1eIfAMg02eBfE5KGJY2mANTnfRKFEApv0Lk+R7Do1ZAeWs5pAjJxQ ymJrbds1e69bHvJFb9gVWXxgMrGOPacCxZPiZ4tDqq0xbORp06hU85ZBPZIR3g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4b73GY5XTdzvv3; Wed, 28 May 2025 21:55:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 54SLtniB054900; Wed, 28 May 2025 21:55:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54SLtnfl054897; Wed, 28 May 2025 21:55:49 GMT (envelope-from git) Date: Wed, 28 May 2025 21:55:49 GMT Message-Id: <202505282155.54SLtnfl054897@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kristof Provost Subject: git: fb7c3f0274ff - main - pf: refactor length check in pf_pull_hdr() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: fb7c3f0274ffb00f983a02251bf97089767a921c Auto-Submitted: auto-generated The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=fb7c3f0274ffb00f983a02251bf97089767a921c commit fb7c3f0274ffb00f983a02251bf97089767a921c Author: Kristof Provost AuthorDate: 2025-05-26 08:16:20 +0000 Commit: Kristof Provost CommitDate: 2025-05-28 21:40:36 +0000 pf: refactor length check in pf_pull_hdr() Move the common length check in pf_pull_hdr() after the address family switch. This makes the specific calculation more obvious. OK claudio@ Obtained from: OpenBSD, bluhm , 9f98372a33 Sponsored by: Rubicon Communications, LLC ("Netgate") --- sys/netpfil/pf/pf.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c index e9082da193e6..996e329a204e 100644 --- a/sys/netpfil/pf/pf.c +++ b/sys/netpfil/pf/pf.c @@ -8756,6 +8756,7 @@ void * pf_pull_hdr(const struct mbuf *m, int off, void *p, int len, u_short *actionp, u_short *reasonp, sa_family_t af) { + int iplen = 0; switch (af) { #ifdef INET case AF_INET: { @@ -8771,12 +8772,7 @@ pf_pull_hdr(const struct mbuf *m, int off, void *p, int len, } return (NULL); } - if (m->m_pkthdr.len < off + len || - ntohs(h->ip_len) < off + len) { - ACTION_SET(actionp, PF_DROP); - REASON_SET(reasonp, PFRES_SHORT); - return (NULL); - } + iplen = ntohs(h->ip_len); break; } #endif /* INET */ @@ -8784,17 +8780,16 @@ pf_pull_hdr(const struct mbuf *m, int off, void *p, int len, case AF_INET6: { const struct ip6_hdr *h = mtod(m, struct ip6_hdr *); - if (m->m_pkthdr.len < off + len || - (ntohs(h->ip6_plen) + sizeof(struct ip6_hdr)) < - (unsigned)(off + len)) { - ACTION_SET(actionp, PF_DROP); - REASON_SET(reasonp, PFRES_SHORT); - return (NULL); - } + iplen = ntohs(h->ip6_plen) + sizeof(struct ip6_hdr); break; } #endif /* INET6 */ } + if (m->m_pkthdr.len < off + len || iplen < off + len) { + ACTION_SET(actionp, PF_DROP); + REASON_SET(reasonp, PFRES_SHORT); + return (NULL); + } m_copydata(m, off, len, p); return (p); }