Diff for /src/sys/netinet/tcp_input.c between versions 1.21 and 1.22

version 1.21, 2004/03/21 07:15:36 version 1.22, 2004/03/22 06:38:17
Line 456  tcp_input(m, off0, proto) Line 456  tcp_input(m, off0, proto)
                         ip_stripoptions(m);                          ip_stripoptions(m);
                         off0 = sizeof(struct ip);                          off0 = sizeof(struct ip);
                 }                  }
                if (m->m_len < sizeof(struct tcpiphdr)) {                /* already checked and pulled up in ip_demux() */
                        if ((m = m_pullup(m, sizeof(struct tcpiphdr))) == 0) {                KASSERT(m->m_len >= sizeof(struct tcpiphdr),
                                tcpstat.tcps_rcvshort++;                    ("TCP header not in one mbuf"));
                                return; 
                        } 
                } 
                 ip = mtod(m, struct ip *);                  ip = mtod(m, struct ip *);
                 ipov = (struct ipovly *)ip;                  ipov = (struct ipovly *)ip;
                 th = (struct tcphdr *)((caddr_t)ip + off0);                  th = (struct tcphdr *)((caddr_t)ip + off0);
Line 502  tcp_input(m, off0, proto) Line 499  tcp_input(m, off0, proto)
          * pull out TCP options and adjust length.              XXX           * pull out TCP options and adjust length.              XXX
          */           */
         off = th->th_off << 2;          off = th->th_off << 2;
        if (off < sizeof(struct tcphdr) || off > tlen) {        /* already checked and pulled up in ip_demux() */
                tcpstat.tcps_rcvbadoff++;        KASSERT(off >= sizeof(struct tcphdr) && off <= tlen,
                goto drop;            ("bad TCP data offset"));
        } 
         tlen -= off;    /* tlen is used instead of ti->ti_len */          tlen -= off;    /* tlen is used instead of ti->ti_len */
         if (off > sizeof(struct tcphdr)) {          if (off > sizeof(struct tcphdr)) {
                 if (isipv6) {                  if (isipv6) {
Line 513  tcp_input(m, off0, proto) Line 509  tcp_input(m, off0, proto)
                         ip6 = mtod(m, struct ip6_hdr *);                          ip6 = mtod(m, struct ip6_hdr *);
                         th = (struct tcphdr *)((caddr_t)ip6 + off0);                          th = (struct tcphdr *)((caddr_t)ip6 + off0);
                 } else {                  } else {
                        if (m->m_len < sizeof(struct ip) + off) {                        /* already pulled up in ip_demux() */
                                if ((m = m_pullup(m, sizeof(struct ip) + off))                        KASSERT(m->m_len >= sizeof(struct ip) + off,
                                                == 0) {                            ("TCP header and options not in one mbuf"));
                                        tcpstat.tcps_rcvshort++; 
                                        return; 
                                } 
                                ip = mtod(m, struct ip *); 
                                ipov = (struct ipovly *)ip; 
                                th = (struct tcphdr *)((caddr_t)ip + off0); 
                        } 
                 }                  }
                 optlen = off - sizeof(struct tcphdr);                  optlen = off - sizeof(struct tcphdr);
                 optp = (u_char *)(th + 1);                  optp = (u_char *)(th + 1);

Removed from v.1.21  
changed lines
  Added in v.1.22