Author: bz
Date: Fri Nov 15 21:51:43 2019
New Revision: 354750
URL: https://svnweb.freebsd.org/changeset/base/354750

Log:
  IP6_EXTHDR_CHECK(): remove the last instances
  
  While r354748 removed almost all IP6_EXTHDR_CHECK() calls, these
  are not part of the PULLDOWN_TESTS.
  Equally convert these IP6_EXTHDR_CHECK()s here to m_pullup() and remove
  the extra check and m_pullup() in tcp_input() under isipv6 given
  tcp6_input() has done exactly that pullup already.
  
  MFC after:    8 weeks
  Sponsored by: Netflix

Modified:
  head/sys/netinet/tcp_input.c

Modified: head/sys/netinet/tcp_input.c
==============================================================================
--- head/sys/netinet/tcp_input.c        Fri Nov 15 21:44:17 2019        
(r354749)
+++ head/sys/netinet/tcp_input.c        Fri Nov 15 21:51:43 2019        
(r354750)
@@ -517,7 +517,12 @@ tcp6_input(struct mbuf **mp, int *offp, int proto)
        struct ip6_hdr *ip6;
 
        m = *mp;
-       IP6_EXTHDR_CHECK(m, *offp, sizeof(struct tcphdr), IPPROTO_DONE);
+       m = m_pullup(m, *offp + sizeof(struct tcphdr));
+       if (m == NULL) {
+               *mp = m;
+               TCPSTAT_INC(tcps_rcvshort);
+               return (IPPROTO_DONE);
+       }
 
        /*
         * draft-itojun-ipv6-tcp-to-anycast
@@ -595,16 +600,7 @@ tcp_input(struct mbuf **mp, int *offp, int proto)
 
 #ifdef INET6
        if (isipv6) {
-               /* IP6_EXTHDR_CHECK() is already done at tcp6_input(). */
 
-               if (m->m_len < (sizeof(*ip6) + sizeof(*th))) {
-                       m = m_pullup(m, sizeof(*ip6) + sizeof(*th));
-                       if (m == NULL) {
-                               TCPSTAT_INC(tcps_rcvshort);
-                               return (IPPROTO_DONE);
-                       }
-               }
-
                ip6 = mtod(m, struct ip6_hdr *);
                th = (struct tcphdr *)((caddr_t)ip6 + off0);
                tlen = sizeof(*ip6) + ntohs(ip6->ip6_plen) - off0;
@@ -712,7 +708,11 @@ tcp_input(struct mbuf **mp, int *offp, int proto)
        if (off > sizeof (struct tcphdr)) {
 #ifdef INET6
                if (isipv6) {
-                       IP6_EXTHDR_CHECK(m, off0, off, IPPROTO_DONE);
+                       m = m_pullup(m, off0 + off);
+                       if (m == NULL) {
+                               TCPSTAT_INC(tcps_rcvshort);
+                               return (IPPROTO_DONE);
+                       }
                        ip6 = mtod(m, struct ip6_hdr *);
                        th = (struct tcphdr *)((caddr_t)ip6 + off0);
                }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to