Hi,

I would like to move the common length check in pf_pull_hdr() after
the address family switch.  This makes the specific calculation
more obvious.

ok?

bluhm

Index: net/pf.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/net/pf.c,v
retrieving revision 1.1026
diff -u -p -r1.1026 pf.c
--- net/pf.c    20 May 2017 22:56:43 -0000      1.1026
+++ net/pf.c    23 May 2017 00:48:35 -0000
@@ -5611,6 +5611,8 @@ void *
 pf_pull_hdr(struct mbuf *m, int off, void *p, int len,
     u_short *actionp, u_short *reasonp, sa_family_t af)
 {
+       int iplen = 0;
+
        switch (af) {
        case AF_INET: {
                struct ip       *h = mtod(m, struct ip *);
@@ -5625,28 +5627,22 @@ pf_pull_hdr(struct mbuf *m, int off, voi
                        }
                        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;
        }
 #ifdef INET6
        case AF_INET6: {
                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);

Reply via email to